Skip to content

Commit 6af73d5

Browse files
committed
banda 22
1 parent 4d3afbb commit 6af73d5

24 files changed

Lines changed: 151 additions & 421 deletions

modular_meta/_defines/antagonists.dm

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -99,11 +99,8 @@
9999
#define COMSIG_SOL_WARNING_GIVEN "comsig_sol_warning_given"
100100
#define COMSIG_BLOODSUCKER_ON_LIFETICK "comsig_bloodsucker_on_lifetick"
101101

102-
#define DANGER_LEVEL_FIRST_WARNING 1
103-
#define DANGER_LEVEL_SECOND_WARNING 2
104-
#define DANGER_LEVEL_THIRD_WARNING 3
105-
#define DANGER_LEVEL_SOL_ROSE 4
106-
#define DANGER_LEVEL_SOL_ENDED 5
102+
#define DANGER_LEVEL_SOL_ROSE 1
103+
#define DANGER_LEVEL_SOL_ENDED 2
107104

108105
/**
109106
* Clan defines

modular_meta/features/antagonists/bloodsuckers/code/bloodsucker/bloodsucker_datum.dm

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -91,13 +91,11 @@
9191
var/static/list/bloodsucker_traits = list(
9292
TRAIT_NOBREATH,
9393
TRAIT_SLEEPIMMUNE,
94-
TRAIT_NOCRITDAMAGE,
9594
TRAIT_RESISTCOLD,
9695
TRAIT_RADIMMUNE,
9796
TRAIT_GENELESS,
9897
TRAIT_STABLEHEART,
9998
TRAIT_NOSOFTCRIT,
100-
TRAIT_NOHARDCRIT,
10199
TRAIT_AGEUSIA,
102100
TRAIT_COLDBLOODED,
103101
TRAIT_VIRUSIMMUNE,
@@ -186,9 +184,6 @@
186184
///The signals registered with the sol subsystem here are reregistered on mind transfer.
187185
/datum/antagonist/bloodsucker/on_gain()
188186
RegisterSignal(SSsunlight, COMSIG_SOL_RANKUP_BLOODSUCKERS, PROC_REF(sol_rank_up))
189-
RegisterSignal(SSsunlight, COMSIG_SOL_NEAR_START, PROC_REF(sol_near_start))
190-
RegisterSignal(SSsunlight, COMSIG_SOL_END, PROC_REF(on_sol_end))
191-
RegisterSignal(SSsunlight, COMSIG_SOL_RISE_TICK, PROC_REF(handle_sol))
192187
RegisterSignal(SSsunlight, COMSIG_SOL_WARNING_GIVEN, PROC_REF(give_warning))
193188

194189
if(IS_FAVORITE_VASSAL(owner.current)) // Vassals shouldnt be getting the same benefits as Bloodsuckers.
@@ -211,7 +206,7 @@
211206

212207
/// Called by the remove_antag_datum() and remove_all_antag_datums() mind procs for the antag datum to handle its own removal and deletion.
213208
/datum/antagonist/bloodsucker/on_removal()
214-
UnregisterSignal(SSsunlight, list(COMSIG_SOL_RANKUP_BLOODSUCKERS, COMSIG_SOL_NEAR_START, COMSIG_SOL_END, COMSIG_SOL_RISE_TICK, COMSIG_SOL_WARNING_GIVEN))
209+
UnregisterSignal(SSsunlight, list(COMSIG_SOL_RANKUP_BLOODSUCKERS, COMSIG_SOL_NEAR_START, COMSIG_SOL_END, COMSIG_SOL_RISE_TICK))
215210
clear_powers_and_stats()
216211
check_cancel_sunlight() //check if sunlight should end
217212
return ..()
@@ -271,10 +266,6 @@
271266
//Sol-related signals are removed when 'FinalDeath()' is called,
272267
//so we'll reregister them here.
273268
RegisterSignal(SSsunlight, COMSIG_SOL_RANKUP_BLOODSUCKERS, PROC_REF(sol_rank_up), TRUE)
274-
RegisterSignal(SSsunlight, COMSIG_SOL_NEAR_START, PROC_REF(sol_near_start), TRUE)
275-
RegisterSignal(SSsunlight, COMSIG_SOL_END, PROC_REF(on_sol_end), TRUE)
276-
RegisterSignal(SSsunlight, COMSIG_SOL_RISE_TICK, PROC_REF(handle_sol), TRUE)
277-
RegisterSignal(SSsunlight, COMSIG_SOL_WARNING_GIVEN, PROC_REF(give_warning), TRUE)
278269

279270
/datum/antagonist/bloodsucker/greet()
280271
. = ..()

modular_meta/features/antagonists/bloodsuckers/code/bloodsucker/bloodsucker_hud.dm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
screen_loc = UI_VAMPRANK_DISPLAY
2525

2626
/atom/movable/screen/bloodsucker/sunlight_counter
27-
name = "Solar Flare Timer"
27+
name = "Time Cycle"
2828
icon_state = "sunlight"
2929
screen_loc = UI_SUNLIGHT_DISPLAY
3030
#ifdef BLOODSUCKER_TESTING

modular_meta/features/antagonists/bloodsuckers/code/bloodsucker/bloodsucker_life.dm

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,6 @@
277277
))
278278
UnregisterSignal(SSsunlight, list(
279279
COMSIG_SOL_RANKUP_BLOODSUCKERS,
280-
COMSIG_SOL_NEAR_START,
281280
COMSIG_SOL_END,
282281
COMSIG_SOL_RISE_TICK,
283282
COMSIG_SOL_WARNING_GIVEN,

modular_meta/features/antagonists/bloodsuckers/code/bloodsucker/bloodsucker_moodlets.dm

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -28,21 +28,6 @@
2828
mood_change = 15
2929
timeout = 10 MINUTES
3030

31-
/datum/mood_event/coffinsleep
32-
description = span_nicegreen("I slept in a coffin during the day. I feel whole again.")
33-
mood_change = 10
34-
timeout = 5 MINUTES
35-
36-
/datum/mood_event/daylight_1
37-
description = span_boldwarning("I slept poorly in a makeshift coffin during the day.")
38-
mood_change = -3
39-
timeout = 3 MINUTES
40-
41-
/datum/mood_event/daylight_2
42-
description = span_boldwarning("I have been scorched by the unforgiving rays of the sun.")
43-
mood_change = -7
44-
timeout = 5 MINUTES
45-
4631
///Candelabrum's mood event to non Bloodsucker/Vassals
4732
/datum/mood_event/vampcandle
4833
description = span_boldwarning("Something is making your mind feel... loose.")
Lines changed: 2 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/**
22
* # Assigning Sol
33
*
4-
* Sol is the sunlight, during this period, all Bloodsuckers must be in their coffin, else they burn.
4+
* Sol is the sunlight. After sol bloodsuckers gain ranks
55
*/
66

77
/// Start Sol, called when someone is assigned Bloodsucker
@@ -24,90 +24,12 @@
2424

2525
INVOKE_ASYNC(src, PROC_REF(RankUp))
2626

27-
///Called when Sol is near starting.
28-
/datum/antagonist/bloodsucker/proc/sol_near_start(atom/source)
29-
SIGNAL_HANDLER
30-
if(bloodsucker_lair_area && !(locate(/datum/action/cooldown/bloodsucker/gohome) in powers))
31-
BuyPower(new /datum/action/cooldown/bloodsucker/gohome)
32-
33-
///Called when Sol first ends.
34-
/datum/antagonist/bloodsucker/proc/on_sol_end(atom/source)
35-
SIGNAL_HANDLER
36-
check_end_torpor()
37-
for(var/datum/action/cooldown/bloodsucker/power in powers)
38-
if(istype(power, /datum/action/cooldown/bloodsucker/gohome))
39-
RemovePower(power)
40-
41-
/// Cycle through all vamp antags and check if they're inside a closet.
42-
/datum/antagonist/bloodsucker/proc/handle_sol()
43-
SIGNAL_HANDLER
44-
if(!owner || !owner.current)
45-
return
46-
47-
if(!istype(owner.current.loc, /obj/structure))
48-
if(COOLDOWN_FINISHED(src, bloodsucker_spam_sol_burn))
49-
if(bloodsucker_level > 0)
50-
to_chat(owner, span_userdanger("The solar flare sets your skin ablaze!"))
51-
else
52-
to_chat(owner, span_userdanger("The solar flare scalds your neophyte skin!"))
53-
COOLDOWN_START(src, bloodsucker_spam_sol_burn, BLOODSUCKER_SPAM_SOL) //This should happen twice per Sol
54-
55-
if(owner.current.fire_stacks <= 0)
56-
owner.current.fire_stacks = 0
57-
if(bloodsucker_level > 0)
58-
owner.current.adjust_fire_stacks(0.2 + bloodsucker_level / 10)
59-
owner.current.ignite_mob()
60-
owner.current.adjust_fire_loss(2 + (bloodsucker_level / 2))
61-
owner.current.updatehealth()
62-
owner.current.add_mood_event("vampsleep", /datum/mood_event/daylight_2)
63-
return
64-
65-
if(istype(owner.current.loc, /obj/structure/closet/crate/coffin)) // Coffins offer the BEST protection
66-
if(owner.current.am_staked() && COOLDOWN_FINISHED(src, bloodsucker_spam_sol_burn))
67-
to_chat(owner.current, span_userdanger("You are staked! Remove the offending weapon from your heart before sleeping."))
68-
COOLDOWN_START(src, bloodsucker_spam_sol_burn, BLOODSUCKER_SPAM_SOL) //This should happen twice per Sol
69-
if(!HAS_TRAIT(owner.current, TRAIT_NODEATH))
70-
check_begin_torpor(TRUE)
71-
owner.current.add_mood_event("vampsleep", /datum/mood_event/coffinsleep)
72-
dirty_area()
73-
return
74-
75-
if(COOLDOWN_FINISHED(src, bloodsucker_spam_sol_burn)) // Closets offer SOME protection
76-
to_chat(owner, span_warning("Your skin sizzles. [owner.current.loc] doesn't protect well against UV bombardment."))
77-
COOLDOWN_START(src, bloodsucker_spam_sol_burn, BLOODSUCKER_SPAM_SOL) //This should happen twice per Sol
78-
owner.current.adjust_fire_loss(0.5 + (bloodsucker_level / 4))
79-
owner.current.updatehealth()
80-
owner.current.add_mood_event("vampsleep", /datum/mood_event/daylight_1)
81-
82-
///Makes the area the bloodsucker is currently in dirty with cobweb and dirt.
83-
/datum/antagonist/bloodsucker/proc/dirty_area()
84-
var/list/turf/area_turfs = get_area_turfs(get_area(owner.current))
85-
var/turf/turf_to_be_dirtied = pick(area_turfs)
86-
if(turf_to_be_dirtied && !turf_to_be_dirtied.density)
87-
var/turf/north_turf = get_step(turf_to_be_dirtied, NORTH)
88-
if(istype(north_turf, /turf/closed/wall))
89-
var/turf/west_turf = get_step(turf_to_be_dirtied, WEST)
90-
if(istype(west_turf, /turf/closed/wall))
91-
new /obj/effect/decal/cleanable/cobweb(turf_to_be_dirtied)
92-
var/turf/east_turf = get_step(turf_to_be_dirtied, EAST)
93-
if(istype(east_turf, /turf/closed/wall))
94-
new /obj/effect/decal/cleanable/cobweb/cobweb2(turf_to_be_dirtied)
95-
new /obj/effect/decal/cleanable/dirt(turf_to_be_dirtied)
96-
9727
/datum/antagonist/bloodsucker/proc/give_warning(atom/source, danger_level, vampire_warning_message, vassal_warning_message)
9828
SIGNAL_HANDLER
9929
if(!owner)
10030
return
10131
to_chat(owner, vampire_warning_message)
10232

10333
switch(danger_level)
104-
if(DANGER_LEVEL_FIRST_WARNING)
105-
owner.current.playsound_local(null, 'modular_meta/features/antagonists/bloodsuckers/sounds/griffin_3.ogg', 50, 1)
106-
if(DANGER_LEVEL_SECOND_WARNING)
107-
owner.current.playsound_local(null, 'modular_meta/features/antagonists/bloodsuckers/sounds/griffin_5.ogg', 50, 1)
108-
if(DANGER_LEVEL_THIRD_WARNING)
109-
owner.current.playsound_local(null, 'sound/effects/alert.ogg', 75, 1)
110-
if(DANGER_LEVEL_SOL_ROSE)
111-
owner.current.playsound_local(null, 'sound/ambience/misc/ambimystery.ogg', 75, 1)
11234
if(DANGER_LEVEL_SOL_ENDED)
113-
owner.current.playsound_local(null, 'sound/music/antag/bloodcult/ghosty_wind.ogg', 90, 1)
35+
owner.current.playsound_local(null, 'sound/ambience/misc/source_holehit3.ogg', 100, 1)

modular_meta/features/antagonists/bloodsuckers/code/bloodsucker/bloodsucker_torpor.dm

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,8 @@
8383
return FALSE
8484
// You are in a Coffin, so instead we'll check TOTAL damage, here.
8585
if(istype(user.loc, /obj/structure/closet/crate/coffin))
86-
if(total_damage <= 10)
86+
if(total_damage <= 20)
8787
owner.current.remove_status_effect(/datum/status_effect/torpor)
8888
else
89-
if(total_brute <= 10)
89+
if(total_brute <= 20)
9090
owner.current.remove_status_effect(/datum/status_effect/torpor)

modular_meta/features/antagonists/bloodsuckers/code/bloodsucker/subsystem_sunlight.dm

Lines changed: 4 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,6 @@
22
#define TIME_BLOODSUCKER_DAY 60
33
///Base time nighttime should be in for, until Sol rises.
44
#define TIME_BLOODSUCKER_NIGHT 600
5-
///Time left to send an alert to Bloodsuckers about an incoming Sol.
6-
#define TIME_BLOODSUCKER_DAY_WARN 90
7-
///Time left to send an urgent alert to Bloodsuckers about an incoming Sol.
8-
#define TIME_BLOODSUCKER_DAY_FINAL_WARN 30
9-
///Time left to alert that Sol is rising.
10-
#define TIME_BLOODSUCKER_BURN_INTERVAL 5
115

126
///How much time Sol can be 'off' by, keeping the time inconsistent.
137
#define TIME_BLOODSUCKER_SOL_DELAY 120
@@ -42,48 +36,24 @@ SUBSYSTEM_DEF(sunlight)
4236
SEND_SIGNAL(src, COMSIG_SOL_END)
4337
warn_daylight(
4438
danger_level = DANGER_LEVEL_SOL_ENDED,
45-
vampire_warning_message = span_announce("The solar flare has ended, and the daylight danger has passed... for now."),
46-
vassal_warning_message = span_announce("The solar flare has ended, and the daylight danger has passed... for now."),
39+
vampire_warning_message = span_announce("Cycle of Night and Day ended."),
40+
vassal_warning_message = span_announce("Cycle of Night and Day ended."),
4741
)
4842
return
4943

5044
switch(time_til_cycle)
51-
if(TIME_BLOODSUCKER_DAY_WARN)
52-
SEND_SIGNAL(src, COMSIG_SOL_NEAR_START)
53-
warn_daylight(
54-
danger_level = DANGER_LEVEL_FIRST_WARNING,
55-
vampire_warning_message = span_danger("Solar flares will bombard the station with dangerous UV radiation in [TIME_BLOODSUCKER_DAY_WARN / 60] minutes. <b>Prepare to seek cover in a coffin or closet.</b>"),
56-
)
57-
if(TIME_BLOODSUCKER_DAY_FINAL_WARN)
58-
message_admins("BLOODSUCKER NOTICE: Daylight beginning in [TIME_BLOODSUCKER_DAY_FINAL_WARN] seconds.)")
59-
warn_daylight(
60-
danger_level = DANGER_LEVEL_SECOND_WARNING,
61-
vampire_warning_message = span_userdanger("Solar flares are about to bombard the station! You have [TIME_BLOODSUCKER_DAY_FINAL_WARN] seconds to find cover!"),
62-
vassal_warning_message = span_danger("In [TIME_BLOODSUCKER_DAY_FINAL_WARN] seconds, your master will be at risk of burning under a solar flare. Make sure they find cover!"),
63-
)
64-
if(TIME_BLOODSUCKER_BURN_INTERVAL)
65-
warn_daylight(
66-
danger_level = DANGER_LEVEL_THIRD_WARNING,
67-
vampire_warning_message = span_userdanger("Seek cover, for Sol rises!"),
68-
)
6945
if(NONE)
7046
sunlight_active = TRUE
7147
//set the timer to countdown daytime now.
7248
time_til_cycle = TIME_BLOODSUCKER_DAY
73-
message_admins("BLOODSUCKER NOTICE: Daylight Beginning (Lasts for [TIME_BLOODSUCKER_DAY / 60] minutes.)")
7449
warn_daylight(
75-
danger_level = DANGER_LEVEL_SOL_ROSE,
76-
vampire_warning_message = span_userdanger("Solar flares bombard the station with deadly UV light! Stay in cover for the next [TIME_BLOODSUCKER_DAY / 60] minutes or risk Final Death!"),
77-
vassal_warning_message = span_userdanger("Solar flares bombard the station with UV light!"),
50+
vampire_warning_message = span_userdanger("Cycle of Night and Day started, next [TIME_BLOODSUCKER_DAY / 60] minutes will be daytime"),
51+
vassal_warning_message = span_userdanger("Time is Day now!"),
7852
)
79-
8053
/datum/controller/subsystem/sunlight/proc/warn_daylight(danger_level, vampire_warning_message, vassal_warning_message)
8154
SEND_SIGNAL(src, COMSIG_SOL_WARNING_GIVEN, danger_level, vampire_warning_message, vassal_warning_message)
8255

8356
#undef TIME_BLOODSUCKER_SOL_DELAY
8457

85-
#undef TIME_BLOODSUCKER_DAY
8658
#undef TIME_BLOODSUCKER_NIGHT
87-
#undef TIME_BLOODSUCKER_DAY_WARN
88-
#undef TIME_BLOODSUCKER_DAY_FINAL_WARN
8959
#undef TIME_BLOODSUCKER_BURN_INTERVAL

modular_meta/features/antagonists/bloodsuckers/code/powers/fortitude.dm

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@
1212
check_flags = BP_CANT_USE_IN_TORPOR|BP_CANT_USE_IN_FRENZY
1313
purchase_flags = BLOODSUCKER_CAN_BUY|VASSAL_CAN_BUY
1414
bloodcost = 30
15-
cooldown_time = 8 SECONDS
16-
constant_bloodcost = 0.2
15+
cooldown_time = 10 SECONDS
16+
constant_bloodcost = 3
1717
var/was_running
1818
var/fortitude_resist // So we can raise and lower your brute resist based on what your level_current WAS.
1919

0 commit comments

Comments
 (0)