|
3 | 3 | show_in_antagpanel = TRUE |
4 | 4 | roundend_category = "bloodsuckers" |
5 | 5 | antagpanel_category = "Bloodsucker" |
6 | | - job_rank = ROLE_BLOODSUCKER |
7 | 6 | antag_hud_name = "bloodsucker" |
| 7 | + job_rank = ROLE_BLOODSUCKER |
8 | 8 | show_to_ghosts = TRUE |
9 | 9 | show_name_in_check_antagonists = TRUE |
10 | | - can_coexist_with_others = FALSE |
11 | 10 | ui_name = "AntagInfoBloodsucker" |
12 | 11 | preview_outfit = /datum/outfit/bloodsucker_outfit |
13 | 12 | count_towards_antag_cap = TRUE |
|
20 | 19 |
|
21 | 20 | ///If we are currently in a Frenzy |
22 | 21 | var/frenzied = FALSE |
23 | | - ///If we have a task assigned |
24 | | - var/has_task = FALSE |
| 22 | + ///The current task we have assigned, if any |
| 23 | + var/datum/altar_task/current_task |
25 | 24 | ///How many times have we used a blood altar |
26 | 25 | var/altar_uses = 0 |
27 | | - var/task_heart_required = 0 |
28 | | - var/task_blood_required = 0 |
29 | | - var/task_blood_drank = 0 |
30 | 26 |
|
31 | 27 | // give TRAIT_STRONG_GRABBER during frenzy |
32 | 28 |
|
|
42 | 38 |
|
43 | 39 | var/bloodsucker_level = 1 |
44 | 40 | var/bloodsucker_level_unspent = 1 |
| 41 | + |
45 | 42 | var/passive_blood_drain = -0.1 |
46 | | - var/additional_regen |
| 43 | + var/additional_regen = 0 |
47 | 44 | var/bloodsucker_regen_rate = 0.3 |
48 | 45 | /// How much blood we have, starting off at default blood levels. |
49 | 46 | var/bloodsucker_blood_volume = BLOOD_VOLUME_GENERIC |
|
85 | 82 | TRAIT_VIRUSIMMUNE, |
86 | 83 | TRAIT_TOXIMMUNE, |
87 | 84 | TRAIT_HARDLY_WOUNDED, |
88 | | - TRAIT_RESISTDAMAGESLOWDOWN |
| 85 | + TRAIT_RESISTDAMAGESLOWDOWN, |
| 86 | + TRAIT_UNHOLY |
89 | 87 | ) |
90 | 88 |
|
91 | 89 | //////////////////////////////////////////////////////////////////////////////////// |
|
102 | 100 | RegisterSignal(owner, COMSIG_MIND_CHECK_ANTAG_RESOURCE, PROC_REF(has_blood)) |
103 | 101 | RegisterSignal(owner, COMSIG_MIND_SPEND_ANTAG_RESOURCE, PROC_REF(use_blood)) |
104 | 102 |
|
105 | | - if(IS_FAVORITE_VASSAL(owner.current)) // Vassals shouldnt be getting the same benefits as Bloodsuckers. |
106 | | - bloodsucker_level_unspent = 0 |
107 | | - show_in_roundend = FALSE |
108 | | - else |
109 | | - // Start Sunlight if first Bloodsucker |
110 | | - check_start_sunlight() |
111 | | - // Name and Titles |
112 | | - SelectFirstName() |
113 | | - SelectTitle(am_fledgling = TRUE) |
114 | | - SelectReputation(am_fledgling = TRUE) |
115 | | - // Objectives |
116 | | - forge_bloodsucker_objectives() |
| 103 | + // Start Sunlight if first Bloodsucker |
| 104 | + check_start_sunlight() |
| 105 | + // Objectives |
| 106 | + forge_bloodsucker_objectives() |
117 | 107 |
|
118 | 108 | return ..() |
119 | 109 |
|
|
128 | 118 | RegisterSignal(current_mob, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) |
129 | 119 | RegisterSignal(current_mob, COMSIG_LIVING_LIFE, PROC_REF(LifeTick)) |
130 | 120 | RegisterSignal(current_mob, COMSIG_LIVING_DEATH, PROC_REF(on_death)) |
| 121 | + current_mob.add_traits(bloodsucker_traits, type) |
131 | 122 |
|
132 | 123 | handle_clown_mutation(current_mob, mob_override ? null : "As a vampiric clown, you are no longer a danger to yourself. Your clownish nature has been subdued by your thirst for blood.") |
133 | 124 | add_team_hud(current_mob) |
134 | | - ADD_TRAIT(current_mob, TRAIT_UNHOLY, type) |
135 | 125 |
|
136 | 126 | if(current_mob.hud_used) |
137 | 127 | on_hud_created() |
138 | 128 | else |
139 | 129 | RegisterSignal(current_mob, COMSIG_MOB_HUD_CREATED, PROC_REF(on_hud_created)) |
| 130 | + |
140 | 131 | #ifdef BLOODSUCKER_TESTING |
141 | 132 | var/turf/user_loc = get_turf(current_mob) |
142 | 133 | new /obj/structure/closet/crate/coffin(user_loc) |
143 | 134 | new /obj/structure/bloodsucker/vassalrack(user_loc) |
144 | 135 | #endif |
145 | 136 |
|
146 | 137 |
|
147 | | -//////////////////////////////////////////////////////////////////////////////////// |
148 | | -//----------------------------------Hud Handling----------------------------------// |
149 | | -//////////////////////////////////////////////////////////////////////////////////// |
150 | | -/datum/antagonist/bloodsucker/proc/on_hud_created(datum/source) |
151 | | - SIGNAL_HANDLER |
152 | | - |
153 | | - var/datum/hud/bloodsucker_hud = owner.current.hud_used |
154 | | - |
155 | | - blood_display = new /atom/movable/screen/bloodsucker/blood_counter(bloodsucker_hud) |
156 | | - bloodsucker_hud.infodisplay += blood_display |
157 | | - |
158 | | - vamprank_display = new /atom/movable/screen/bloodsucker/rank_counter(bloodsucker_hud) |
159 | | - bloodsucker_hud.infodisplay += vamprank_display |
160 | | - |
161 | | - sunlight_display = new /atom/movable/screen/bloodsucker/sunlight_counter(bloodsucker_hud) |
162 | | - bloodsucker_hud.infodisplay += sunlight_display |
163 | | - |
164 | | - INVOKE_ASYNC(bloodsucker_hud, TYPE_PROC_REF(/datum/hud/, show_hud), bloodsucker_hud.hud_version) |
165 | 138 |
|
166 | 139 | //////////////////////////////////////////////////////////////////////////////////// |
167 | 140 | //------------------------------------Removal-------------------------------------// |
|
184 | 157 | . = ..() |
185 | 158 | var/mob/living/current_mob = mob_override || owner.current |
186 | 159 | UnregisterSignal(current_mob, list(COMSIG_LIVING_LIFE, COMSIG_ATOM_EXAMINE, COMSIG_LIVING_DEATH)) |
187 | | - REMOVE_TRAIT(current_mob, TRAIT_UNHOLY, type) |
| 160 | + current_mob.remove_traits(bloodsucker_traits, type) |
188 | 161 |
|
189 | 162 | if(current_mob.hud_used) |
190 | 163 | var/datum/hud/hud_used = current_mob.hud_used |
|
205 | 178 | var/fullname = return_full_name(TRUE) |
206 | 179 | to_chat(owner, span_userdanger("You are [fullname], a strain of vampire known as a Bloodsucker!")) |
207 | 180 | owner.announce_objectives() |
208 | | - if(bloodsucker_level_unspent >= 2) |
209 | | - to_chat(owner, span_announce("As a latejoiner, you have [bloodsucker_level_unspent] bonus Ranks, entering your claimed coffin allows you to spend a Rank.")) |
210 | 181 | owner.current.playsound_local(null, 'sound/ambience/antag/bloodsuckeralert.ogg', 100, FALSE, pressure_affected = FALSE) |
211 | 182 | antag_memory += "Although you were born a mortal, in undeath you earned the name <b>[fullname]</b>.<br>" |
212 | 183 |
|
213 | 184 | /datum/antagonist/bloodsucker/farewell() |
214 | 185 | to_chat(owner.current, span_userdanger("<FONT size = 3>With a snap, your curse has ended. You are no longer a Bloodsucker. You live once more!</FONT>")) |
215 | 186 |
|
| 187 | +//////////////////////////////////////////////////////////////////////////////////// |
| 188 | +//----------------------------------Hud Handling----------------------------------// |
| 189 | +//////////////////////////////////////////////////////////////////////////////////// |
| 190 | +/datum/antagonist/bloodsucker/proc/on_hud_created(datum/source) |
| 191 | + SIGNAL_HANDLER |
| 192 | + |
| 193 | + var/datum/hud/bloodsucker_hud = owner.current.hud_used |
| 194 | + |
| 195 | + blood_display = new /atom/movable/screen/bloodsucker/blood_counter(bloodsucker_hud) |
| 196 | + bloodsucker_hud.infodisplay += blood_display |
| 197 | + |
| 198 | + vamprank_display = new /atom/movable/screen/bloodsucker/rank_counter(bloodsucker_hud) |
| 199 | + bloodsucker_hud.infodisplay += vamprank_display |
| 200 | + |
| 201 | + sunlight_display = new /atom/movable/screen/bloodsucker/sunlight_counter(bloodsucker_hud) |
| 202 | + bloodsucker_hud.infodisplay += sunlight_display |
| 203 | + |
| 204 | + INVOKE_ASYNC(bloodsucker_hud, TYPE_PROC_REF(/datum/hud/, show_hud), bloodsucker_hud.hud_version) |
| 205 | + |
216 | 206 | //////////////////////////////////////////////////////////////////////////////////// |
217 | 207 | //-----------------------------------Ability use----------------------------------// |
218 | 208 | //////////////////////////////////////////////////////////////////////////////////// |
|
360 | 350 | var/list/report = list() |
361 | 351 |
|
362 | 352 | // Vamp name |
363 | | - report += "<br>[span_header("<b>\[[return_full_name(TRUE)]\]</b>")]</span>" |
| 353 | + report += "<br>[span_header("<b>\[name\]</b>")]</span>" |
364 | 354 | report += printplayer(owner) |
365 | 355 | if(my_clan) |
366 | 356 | report += "They were part of the <b>[my_clan.name]</b>!" |
|
441 | 431 | // to_chat(owner, span_boldnotice("Your Altar uses have been reset!")) |
442 | 432 | // altar_uses = 0 |
443 | 433 |
|
444 | | -/// Buying powers |
445 | | -// /datum/antagonist/bloodsucker/proc/BuyPower(datum/action/cooldown/bloodsucker/power) |
446 | | -// for(var/datum/action/cooldown/bloodsucker/current_powers as anything in powers) |
447 | | -// if(current_powers.type == power.type) |
448 | | -// return FALSE |
449 | | -// powers += power |
450 | | -// power.Grant(owner.current) |
451 | | -// return TRUE |
452 | | - |
453 | | -// /datum/antagonist/bloodsucker/proc/RemovePower(datum/action/cooldown/bloodsucker/power) |
454 | | -// if(power.active) |
455 | | -// power.DeactivatePower() |
456 | | -// powers -= power |
457 | | -// power.Remove(owner.current) |
458 | | - |
459 | | -// /datum/antagonist/bloodsucker/proc/give_starting_powers() |
460 | | -// for(var/datum/action/cooldown/bloodsucker/all_powers as anything in all_bloodsucker_powers) |
461 | | -// if(!(initial(all_powers.purchase_flags) & BLOODSUCKER_DEFAULT_POWER)) |
462 | | -// continue |
463 | | -// BuyPower(new all_powers) |
464 | | - |
465 | 434 |
|
466 | 435 | //////////////////////////////////////////////////////////////////////////////////////////////// |
467 | 436 |
|
|
482 | 451 |
|
483 | 452 | /// Name shown on antag list |
484 | 453 | /datum/antagonist/bloodsucker/antag_listing_name() |
485 | | - return ..() + "([return_full_name(TRUE)])" |
| 454 | + return ..() + "(name)" |
486 | 455 |
|
487 | 456 | /// Whatever interesting things happened to the antag admins should know about |
488 | 457 | /// Include additional information about antag in this part |
|
0 commit comments