Hm
This commit is contained in:
@@ -119,7 +119,7 @@
|
|||||||
send_item_attack_message(I, user)
|
send_item_attack_message(I, user)
|
||||||
if(I.force)
|
if(I.force)
|
||||||
apply_damage(totitemdamage, I.damtype) //CIT CHANGE - replaces I.force with totitemdamage
|
apply_damage(totitemdamage, I.damtype) //CIT CHANGE - replaces I.force with totitemdamage
|
||||||
if(I.damtype == BRUTE && !HAS_TRAIT(src, TRAIT_NOMARROW))
|
if(I.damtype == BRUTE)
|
||||||
if(prob(33))
|
if(prob(33))
|
||||||
I.add_mob_blood(src)
|
I.add_mob_blood(src)
|
||||||
var/turf/location = get_turf(src)
|
var/turf/location = get_turf(src)
|
||||||
|
|||||||
@@ -287,3 +287,12 @@
|
|||||||
/obj/item/bedsheet/cosmos = 1)
|
/obj/item/bedsheet/cosmos = 1)
|
||||||
time = 60
|
time = 60
|
||||||
category = CAT_CLOTHING
|
category = CAT_CLOTHING
|
||||||
|
|
||||||
|
|
||||||
|
/datum/crafting_recipe/wintercoat_cosmic
|
||||||
|
name = "Cosmic Winter Coat"
|
||||||
|
result = /obj/item/clothing/neck/garlic_necklace
|
||||||
|
reqs = list(/obj/item/reagent_containers/food/snacks/grown/garlic = 15,
|
||||||
|
/obj/item/stack/cable_coil = 10)
|
||||||
|
time = 100 //Takes awhile to put all the garlics on the coil and knot it.
|
||||||
|
category = CAT_CLOTHING
|
||||||
|
|||||||
@@ -262,7 +262,7 @@
|
|||||||
target.mind.add_antag_datum(V, V.master.get_team())
|
target.mind.add_antag_datum(V, V.master.get_team())
|
||||||
// Update Bloodsucker Title (we're a daddy now)
|
// Update Bloodsucker Title (we're a daddy now)
|
||||||
B.SelectTitle(am_fledgling = FALSE) // Only works if you have no title yet.
|
B.SelectTitle(am_fledgling = FALSE) // Only works if you have no title yet.
|
||||||
// lOg it
|
// Log it
|
||||||
message_admins("[target] has become a Vassal, and is enslaved to [creator].")
|
message_admins("[target] has become a Vassal, and is enslaved to [creator].")
|
||||||
log_admin("[target] has become a Vassal, and is enslaved to [creator].")
|
log_admin("[target] has become a Vassal, and is enslaved to [creator].")
|
||||||
return TRUE
|
return TRUE
|
||||||
|
|||||||
@@ -72,6 +72,8 @@
|
|||||||
to_chat(user, "<span class='notice'> [M] is at full health.</span>")
|
to_chat(user, "<span class='notice'> [M] is at full health.</span>")
|
||||||
return FALSE
|
return FALSE
|
||||||
user.visible_message("<span class='green'>[user] applies \the [src] on [M].</span>", "<span class='green'>You apply \the [src] on [M].</span>")
|
user.visible_message("<span class='green'>[user] applies \the [src] on [M].</span>", "<span class='green'>You apply \the [src] on [M].</span>")
|
||||||
|
if(AmBloodsucker(M))
|
||||||
|
return
|
||||||
M.heal_bodypart_damage((heal_brute/2))
|
M.heal_bodypart_damage((heal_brute/2))
|
||||||
return TRUE
|
return TRUE
|
||||||
if(iscarbon(M))
|
if(iscarbon(M))
|
||||||
@@ -148,6 +150,8 @@
|
|||||||
return
|
return
|
||||||
if(iscarbon(M))
|
if(iscarbon(M))
|
||||||
return heal_carbon(M, user, 0, heal_burn)
|
return heal_carbon(M, user, 0, heal_burn)
|
||||||
|
if(AmBloodsucker(M))
|
||||||
|
return
|
||||||
to_chat(user, "<span class='notice'>You can't heal [M] with the \the [src]!</span>")
|
to_chat(user, "<span class='notice'>You can't heal [M] with the \the [src]!</span>")
|
||||||
|
|
||||||
/obj/item/stack/medical/ointment/suicide_act(mob/living/user)
|
/obj/item/stack/medical/ointment/suicide_act(mob/living/user)
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
/datum/antagonist/bloodsucker/proc/LifeTick()// Should probably run from life.dm, same as handle_changeling, but will be an utter pain to move
|
/datum/antagonist/bloodsucker/proc/LifeTick()// Should probably run from life.dm, same as handle_changeling, but will be an utter pain to move
|
||||||
set waitfor = FALSE // Don't make on_gain() wait for this function to finish. This lets this code run on the side.
|
set waitfor = FALSE // Don't make on_gain() wait for this function to finish. This lets this code run on the side.
|
||||||
var/notice_healing = FALSE
|
var/notice_healing
|
||||||
while(owner && !AmFinalDeath()) // owner.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) == src
|
while(owner && !AmFinalDeath()) // owner.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) == src
|
||||||
if(owner.current.stat == CONSCIOUS && !poweron_feed && !HAS_TRAIT(owner.current, TRAIT_DEATHCOMA)) // Deduct Blood
|
if(owner.current.stat == CONSCIOUS && !poweron_feed && !HAS_TRAIT(owner.current, TRAIT_DEATHCOMA)) // Deduct Blood
|
||||||
AddBloodVolume(-0.1) // -.15 (before tick went from 10 to 30, but we also charge more for faking life now)
|
AddBloodVolume(-0.1) // -.15 (before tick went from 10 to 30, but we also charge more for faking life now)
|
||||||
@@ -82,16 +82,32 @@
|
|||||||
/datum/antagonist/bloodsucker/proc/HandleHealing(mult = 1)
|
/datum/antagonist/bloodsucker/proc/HandleHealing(mult = 1)
|
||||||
// NOTE: Mult of 0 is just a TEST to see if we are injured and need to go into Torpor!
|
// NOTE: Mult of 0 is just a TEST to see if we are injured and need to go into Torpor!
|
||||||
//It is called from your coffin on close (by you only)
|
//It is called from your coffin on close (by you only)
|
||||||
if(poweron_masquerade == TRUE || owner.current.AmStaked() || owner.current.reagents?.has_reagent(/datum/reagent/consumable/garlic))
|
var/notice_garlic
|
||||||
|
var/notice_necklace
|
||||||
|
if(poweron_masquerade == TRUE || owner.current.AmStaked())
|
||||||
|
return FALSE
|
||||||
|
if(owner.current.reagents?.has_reagent(/datum/reagent/consumable/garlic))
|
||||||
|
if(notice_garlic)
|
||||||
|
to_chat(owner.current, "<span class='notice'>Garlic in your blood is interfering with your regeneration!</span>")
|
||||||
|
notice_garlic = TRUE
|
||||||
|
return FALSE
|
||||||
|
if(istype(owner.current.get_item_by_slot(SLOT_NECK), /obj/item/clothing/neck/garlic_necklace))
|
||||||
|
if(notice_necklace)
|
||||||
|
to_chat(owner.current, "<span class='notice'>The necklace on your neck is interrupting your healing!</span>")
|
||||||
|
notice_necklace = TRUE
|
||||||
return FALSE
|
return FALSE
|
||||||
owner.current.adjustStaminaLoss(-1.5 + (regenRate * -7) * mult, 0) // Humans lose stamina damage really quickly. Vamps should heal more.
|
owner.current.adjustStaminaLoss(-1.5 + (regenRate * -7) * mult, 0) // Humans lose stamina damage really quickly. Vamps should heal more.
|
||||||
owner.current.adjustCloneLoss(-0.1 * (regenRate * 2) * mult, 0)
|
owner.current.adjustCloneLoss(-0.1 * (regenRate * 2) * mult, 0)
|
||||||
owner.current.adjustOrganLoss(ORGAN_SLOT_BRAIN, -1 * (regenRate * 4) * mult) //adjustBrainLoss(-1 * (regenRate * 4) * mult, 0)
|
owner.current.adjustOrganLoss(ORGAN_SLOT_BRAIN, -1 * (regenRate * 4) * mult) //adjustBrainLoss(-1 * (regenRate * 4) * mult, 0)
|
||||||
|
if(notice_garlic)
|
||||||
|
notice_garlic = FALSE
|
||||||
|
if(notice_necklace)
|
||||||
|
notice_necklace = FALSE
|
||||||
// No Bleeding
|
// No Bleeding
|
||||||
if(ishuman(owner.current)) //NOTE Current bleeding is horrible, not to count the amount of blood ballistics delete.
|
if(ishuman(owner.current)) //NOTE Current bleeding is horrible, not to count the amount of blood ballistics delete.
|
||||||
var/mob/living/carbon/human/H = owner.current
|
var/mob/living/carbon/human/H = owner.current
|
||||||
if(H.bleed_rate > 0) //Only heal bleeding if we are actually bleeding
|
if(H.bleed_rate > 0) //Only heal bleeding if we are actually bleeding
|
||||||
H.bleed_rate =- 0.5 + regenRate * mult
|
H.bleed_rate =- 0.5 + regenRate * 0.2 * mult
|
||||||
if(iscarbon(owner.current)) // Damage Heal: Do I have damage to ANY bodypart?
|
if(iscarbon(owner.current)) // Damage Heal: Do I have damage to ANY bodypart?
|
||||||
var/mob/living/carbon/C = owner.current
|
var/mob/living/carbon/C = owner.current
|
||||||
var/costMult = 1 // Coffin makes it cheaper
|
var/costMult = 1 // Coffin makes it cheaper
|
||||||
@@ -235,6 +251,7 @@
|
|||||||
|
|
||||||
/datum/antagonist/bloodsucker/proc/Torpor_Begin(amInCoffin = FALSE)
|
/datum/antagonist/bloodsucker/proc/Torpor_Begin(amInCoffin = FALSE)
|
||||||
owner.current.stat = UNCONSCIOUS
|
owner.current.stat = UNCONSCIOUS
|
||||||
|
owner.current.apply_status_effect(STATUS_EFFECT_UNCONSCIOUS)
|
||||||
ADD_TRAIT(owner.current, TRAIT_FAKEDEATH, "bloodsucker") // Come after UNCONSCIOUS or else it fails
|
ADD_TRAIT(owner.current, TRAIT_FAKEDEATH, "bloodsucker") // Come after UNCONSCIOUS or else it fails
|
||||||
ADD_TRAIT(owner.current, TRAIT_NODEATH, "bloodsucker") // Without this, you'll just keep dying while you recover.
|
ADD_TRAIT(owner.current, TRAIT_NODEATH, "bloodsucker") // Without this, you'll just keep dying while you recover.
|
||||||
ADD_TRAIT(owner.current, TRAIT_RESISTHIGHPRESSURE, "bloodsucker") // So you can heal in 0 G. otherwise you just...heal forever.
|
ADD_TRAIT(owner.current, TRAIT_RESISTHIGHPRESSURE, "bloodsucker") // So you can heal in 0 G. otherwise you just...heal forever.
|
||||||
@@ -248,8 +265,9 @@
|
|||||||
power.DeactivatePower()
|
power.DeactivatePower()
|
||||||
|
|
||||||
/datum/antagonist/bloodsucker/proc/Torpor_End()
|
/datum/antagonist/bloodsucker/proc/Torpor_End()
|
||||||
REMOVE_TRAIT(owner.current, TRAIT_FAKEDEATH, "bloodsucker")
|
|
||||||
owner.current.stat = SOFT_CRIT
|
owner.current.stat = SOFT_CRIT
|
||||||
|
owner.current.remove_status_effect(STATUS_EFFECT_UNCONSCIOUS)
|
||||||
|
owner.current.cure_fakedeath("bloodsucker")
|
||||||
REMOVE_TRAIT(owner.current, TRAIT_NODEATH, "bloodsucker")
|
REMOVE_TRAIT(owner.current, TRAIT_NODEATH, "bloodsucker")
|
||||||
REMOVE_TRAIT(owner.current, TRAIT_RESISTHIGHPRESSURE, "bloodsucker")
|
REMOVE_TRAIT(owner.current, TRAIT_RESISTHIGHPRESSURE, "bloodsucker")
|
||||||
REMOVE_TRAIT(owner.current, TRAIT_RESISTLOWPRESSURE, "bloodsucker")
|
REMOVE_TRAIT(owner.current, TRAIT_RESISTLOWPRESSURE, "bloodsucker")
|
||||||
|
|||||||
@@ -93,6 +93,12 @@
|
|||||||
if(display_error)
|
if(display_error)
|
||||||
to_chat(owner, "<span class='warning'>You have a stake in your chest! Your powers are useless.</span>")
|
to_chat(owner, "<span class='warning'>You have a stake in your chest! Your powers are useless.</span>")
|
||||||
return FALSE
|
return FALSE
|
||||||
|
if(istype(owner.get_item_by_slot(SLOT_NECK), /obj/item/clothing/neck/garlic_necklace))
|
||||||
|
to_chat(owner, "<span class='warning'The necklace on your neck is interfering with your powers!</span>")
|
||||||
|
return FALSE
|
||||||
|
if(owner.reagents?.has_reagent(/datum/reagent/consumable/garlic))
|
||||||
|
to_chat(owner, "<span class='warning'>Garlic in your blood is interfering with your powers!</span>")
|
||||||
|
return FALSE
|
||||||
// Incap?
|
// Incap?
|
||||||
if(must_be_capacitated)
|
if(must_be_capacitated)
|
||||||
var/mob/living/L = owner
|
var/mob/living/L = owner
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
// STATS
|
// STATS
|
||||||
var/vamplevel = 0
|
var/vamplevel = 0
|
||||||
var/vamplevel_unspent = 1
|
var/vamplevel_unspent = 1
|
||||||
var/regenRate = 0.4 // How many points of Brute do I heal per tick?
|
var/regenRate = 0.4 // How fast do I regenerate?
|
||||||
var/feedAmount = 15 // Amount of blood drawn from a target per tick.
|
var/feedAmount = 15 // Amount of blood drawn from a target per tick.
|
||||||
var/maxBloodVolume = 600 // Maximum blood a Vamp can hold via feeding. // BLOOD_VOLUME_NORMAL 550 // BLOOD_VOLUME_SAFE 475 //BLOOD_VOLUME_OKAY 336 //BLOOD_VOLUME_BAD 224 // BLOOD_VOLUME_SURVIVE 122
|
var/maxBloodVolume = 600 // Maximum blood a Vamp can hold via feeding. // BLOOD_VOLUME_NORMAL 550 // BLOOD_VOLUME_SAFE 475 //BLOOD_VOLUME_OKAY 336 //BLOOD_VOLUME_BAD 224 // BLOOD_VOLUME_SURVIVE 122
|
||||||
// OBJECTIVES
|
// OBJECTIVES
|
||||||
@@ -47,8 +47,8 @@
|
|||||||
SSticker.mode.bloodsuckers |= owner // Add if not already in here (and you might be, if you were picked at round start)
|
SSticker.mode.bloodsuckers |= owner // Add if not already in here (and you might be, if you were picked at round start)
|
||||||
SSticker.mode.check_start_sunlight()// Start Sunlight? (if first Vamp)
|
SSticker.mode.check_start_sunlight()// Start Sunlight? (if first Vamp)
|
||||||
SelectFirstName()// Name & Title
|
SelectFirstName()// Name & Title
|
||||||
SelectTitle(am_fledgling=TRUE) // If I have a creator, then set as Fledgling.
|
SelectTitle(am_fledgling = TRUE) // If I have a creator, then set as Fledgling.
|
||||||
SelectReputation(am_fledgling=TRUE)
|
SelectReputation(am_fledgling = TRUE)
|
||||||
AssignStarterPowersAndStats()// Give Powers & Stats
|
AssignStarterPowersAndStats()// Give Powers & Stats
|
||||||
forge_bloodsucker_objectives()// Objectives & Team
|
forge_bloodsucker_objectives()// Objectives & Team
|
||||||
update_bloodsucker_icons_added(owner.current, "bloodsucker") // Add Antag HUD
|
update_bloodsucker_icons_added(owner.current, "bloodsucker") // Add Antag HUD
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
/datum/action/bloodsucker/cloak
|
/datum/action/bloodsucker/cloak
|
||||||
name = "Cloak of Darkness"
|
name = "Cloak of Darkness"
|
||||||
desc = "Blend into the shadows and become invisible to the untrained eye. Movement is slowed in brightly lit areas."
|
desc = "Blend into the shadows and become invisible to the untrained eye. Movement is slowed in brightly lit areas, and you cannot dissapear while mortals watch you."
|
||||||
button_icon_state = "power_cloak"
|
button_icon_state = "power_cloak"
|
||||||
bloodcost = 5
|
bloodcost = 5
|
||||||
cooldown = 50
|
cooldown = 50
|
||||||
|
|||||||
@@ -23,6 +23,8 @@
|
|||||||
|
|
||||||
/obj/item/clothing/neck/garlic_necklace
|
/obj/item/clothing/neck/garlic_necklace
|
||||||
name = "garlic necklace"
|
name = "garlic necklace"
|
||||||
desc = "A clove of garlic on a string, tied to itself in a circle, just might fit around your neck. For paranoid people who fear getting their blood sucked."
|
desc = "A clove of garlic on a cable, tied to itself in a circle, just might fit around your neck. For <strike>loonies<strike> people who fear getting their blood sucked."
|
||||||
icon_state = "garlic_necklace"
|
icon_state = "garlic_necklace"
|
||||||
|
item_state = "garlic_necklace"
|
||||||
|
alternate_worn_icon = 'icons/mob/neck.dmi'
|
||||||
|
|
||||||
@@ -247,13 +247,13 @@
|
|||||||
|
|
||||||
/proc/CanHug(mob/living/M)
|
/proc/CanHug(mob/living/M)
|
||||||
if(!istype(M))
|
if(!istype(M))
|
||||||
return 0
|
return FALSE
|
||||||
if(M.stat == DEAD)
|
if(M.stat == DEAD)
|
||||||
return 0
|
return FALSE
|
||||||
if(M.getorgan(/obj/item/organ/alien/hivenode))
|
if(M.getorgan(/obj/item/organ/alien/hivenode))
|
||||||
return 0
|
return FALSE
|
||||||
if(AmBloodsucker(M))
|
if(AmBloodsucker(M))
|
||||||
return 0
|
return FALSE
|
||||||
|
|
||||||
if(ismonkey(M))
|
if(ismonkey(M))
|
||||||
return 1
|
return 1
|
||||||
@@ -262,9 +262,9 @@
|
|||||||
if(ishuman(C) && !(SLOT_WEAR_MASK in C.dna.species.no_equip))
|
if(ishuman(C) && !(SLOT_WEAR_MASK in C.dna.species.no_equip))
|
||||||
var/mob/living/carbon/human/H = C
|
var/mob/living/carbon/human/H = C
|
||||||
if(H.is_mouth_covered(head_only = 1))
|
if(H.is_mouth_covered(head_only = 1))
|
||||||
return 0
|
return FALSE
|
||||||
return 1
|
return TRUE
|
||||||
return 0
|
return FALSE
|
||||||
|
|
||||||
#undef MIN_ACTIVE_TIME
|
#undef MIN_ACTIVE_TIME
|
||||||
#undef MAX_ACTIVE_TIME
|
#undef MAX_ACTIVE_TIME
|
||||||
|
|||||||
@@ -82,7 +82,7 @@
|
|||||||
to_chat(H, "<span class='notice'>You're already full!</span>")
|
to_chat(H, "<span class='notice'>You're already full!</span>")
|
||||||
return
|
return
|
||||||
//This checks whether or not they are wearing a garlic clove on their neck
|
//This checks whether or not they are wearing a garlic clove on their neck
|
||||||
if(sucking_checks(victim, TRUE, FALSE))
|
if(!sucking_checks(victim, TRUE, FALSE))
|
||||||
return
|
return
|
||||||
if(victim.stat == DEAD)
|
if(victim.stat == DEAD)
|
||||||
to_chat(H, "<span class='notice'>You need a living victim!</span>")
|
to_chat(H, "<span class='notice'>You need a living victim!</span>")
|
||||||
@@ -96,7 +96,7 @@
|
|||||||
to_chat(H, "<span class='warning'>[victim] is blessed! You stop just in time to avoid catching fire.</span>")
|
to_chat(H, "<span class='warning'>[victim] is blessed! You stop just in time to avoid catching fire.</span>")
|
||||||
return
|
return
|
||||||
//Here we check now for both the garlic cloves on the neck and for blood in the victims bloodstream.
|
//Here we check now for both the garlic cloves on the neck and for blood in the victims bloodstream.
|
||||||
if(sucking_checks(victim, TRUE, TRUE))
|
if(!sucking_checks(victim, TRUE, TRUE))
|
||||||
return
|
return
|
||||||
if(!do_after(H, 30, target = victim))
|
if(!do_after(H, 30, target = victim))
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
/datum/reagent/consumable/on_mob_life(mob/living/carbon/M)
|
/datum/reagent/consumable/on_mob_life(mob/living/carbon/M)
|
||||||
current_cycle++
|
current_cycle++
|
||||||
M.nutrition += nutriment_factor
|
M.nutrition += nutriment_factor
|
||||||
|
M.CheckBloodsuckerEatFood(nutriment_factor)
|
||||||
holder.remove_reagent(type, metabolization_rate)
|
holder.remove_reagent(type, metabolization_rate)
|
||||||
|
|
||||||
/datum/reagent/consumable/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
/datum/reagent/consumable/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 45 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.9 KiB |
Reference in New Issue
Block a user