mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-21 03:55:05 +01:00
Vampire Gamemode!
This commit is contained in:
@@ -17,6 +17,7 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set
|
||||
"ninja" = "true", // 10
|
||||
"vox raider" = IS_MODE_COMPILED("heist"), // 11
|
||||
"diona" = 1, // 12
|
||||
"vampire" = IS_MODE_COMPILED("vampire") // 13
|
||||
)
|
||||
|
||||
var/const/MAX_SAVE_SLOTS = 10
|
||||
|
||||
@@ -168,6 +168,10 @@ Works together with spawning an observer, noted above.
|
||||
U.client.images += image(tempHud,target,"huddeathsquad")
|
||||
if("Ninja")
|
||||
U.client.images += image(tempHud,target,"hudninja")
|
||||
if("Vampire")
|
||||
U.client.images += image(tempHud,target,"vampire")
|
||||
if("VampThrall")
|
||||
U.client.images += image(tempHud,target,"vampthrall")
|
||||
else//If we don't know what role they have but they have one.
|
||||
U.client.images += image(tempHud,target,"hudunknown1")
|
||||
else//If the silicon mob has no law datum, no inherent laws, or a law zero, add them to the hud.
|
||||
|
||||
@@ -90,6 +90,24 @@
|
||||
|
||||
if("hurt")
|
||||
|
||||
//Vampire code
|
||||
if(M.zone_sel && M.zone_sel.selecting == "head" && src != M)
|
||||
if(M.mind && M.mind.vampire && (M.mind in ticker.mode.vampires) && !M.mind.vampire.draining)
|
||||
if((head && (head.flags & HEADCOVERSMOUTH)) || (wear_mask && (wear_mask.flags & MASKCOVERSMOUTH)))
|
||||
M << "\red Remove their mask!"
|
||||
return 0
|
||||
if((M.head && (M.head.flags & HEADCOVERSMOUTH)) || (M.wear_mask && (M.wear_mask.flags & MASKCOVERSMOUTH)))
|
||||
M << "\red Remove your mask!"
|
||||
return 0
|
||||
if(mind && mind.vampire && (mind in ticker.mode.vampires))
|
||||
M << "\red Your fangs fail to pierce [src.name]'s cold flesh"
|
||||
return 0
|
||||
//we're good to suck the blood, blaah
|
||||
M.handle_bloodsucking(src)
|
||||
return
|
||||
//end vampire codes
|
||||
|
||||
|
||||
M.attack_log += text("\[[time_stamp()]\] <font color='red'>[M.species.attack_verb]ed [src.name] ([src.ckey])</font>")
|
||||
src.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been [M.species.attack_verb]ed by [M.name] ([M.ckey])</font>")
|
||||
|
||||
|
||||
@@ -125,6 +125,9 @@
|
||||
for(var/obj/item/weapon/grab/G in src)
|
||||
G.process()
|
||||
|
||||
if(mind && mind.vampire)
|
||||
handle_vampire_cloak()
|
||||
|
||||
|
||||
/mob/living/carbon/human/calculate_affecting_pressure(var/pressure)
|
||||
..()
|
||||
@@ -403,6 +406,11 @@
|
||||
internals.icon_state = "internal0"
|
||||
return null
|
||||
|
||||
// USED IN DEATHWHISPERS
|
||||
proc/isInCrit()
|
||||
// Health is in deep shit and we're not already dead
|
||||
return health <= 0 && stat != 2
|
||||
|
||||
|
||||
proc/handle_breath(datum/gas_mixture/breath)
|
||||
if(status_flags & GODMODE)
|
||||
@@ -1222,6 +1230,13 @@
|
||||
see_in_dark = 8
|
||||
see_invisible = SEE_INVISIBLE_LEVEL_ONE
|
||||
|
||||
if(mind && mind.vampire)
|
||||
if((VAMP_VISION in mind.vampire.powers) && !(VAMP_FULL in mind.vampire.powers))
|
||||
sight |= SEE_MOBS
|
||||
if((VAMP_FULL in mind.vampire.powers))
|
||||
sight |= SEE_TURFS|SEE_MOBS|SEE_OBJS
|
||||
see_in_dark = 8
|
||||
if(!druggy) see_invisible = SEE_INVISIBLE_LEVEL_TWO
|
||||
if(XRAY in mutations)
|
||||
sight |= SEE_TURFS|SEE_MOBS|SEE_OBJS
|
||||
see_in_dark = 8
|
||||
|
||||
@@ -89,7 +89,7 @@
|
||||
var/list/heard_a = list() // understood us
|
||||
var/list/heard_b = list() // didn't understand us
|
||||
var/and_passes_on=""
|
||||
if(!said_last_words)
|
||||
if(!said_last_words && src.isInCrit())
|
||||
and_passes_on=" - and passes on"
|
||||
said_last_words=src.stat
|
||||
|
||||
@@ -153,6 +153,6 @@
|
||||
M.show_message(rendered, 2)
|
||||
if(said_last_words)
|
||||
src.stat = 2
|
||||
src.death()
|
||||
src.death(0)
|
||||
src.regenerate_icons()
|
||||
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
/mob/living/simple_animal/hostile/scarybat
|
||||
name = "space bat"
|
||||
desc = "A cute little blood sucking bat that looks pretty pissed."
|
||||
icon_state = "scarybat"
|
||||
icon_living = "scarybat"
|
||||
icon_dead = "scarybat-dead"
|
||||
icon_gib = "scarybat-dead"
|
||||
speak_chance = 0
|
||||
turns_per_move = 3
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
|
||||
response_help = "pets the"
|
||||
response_disarm = "gently pushes aside the"
|
||||
response_harm = "hits the"
|
||||
speed = 4
|
||||
maxHealth = 20
|
||||
health = 20
|
||||
|
||||
harm_intent_damage = 8
|
||||
melee_damage_lower = 10
|
||||
melee_damage_upper = 10
|
||||
attacktext = "bites"
|
||||
attack_sound = 'sound/weapons/bite.ogg'
|
||||
|
||||
//Space carp aren't affected by atmos.
|
||||
min_oxy = 0
|
||||
max_oxy = 0
|
||||
min_tox = 0
|
||||
max_tox = 0
|
||||
min_co2 = 0
|
||||
max_co2 = 0
|
||||
min_n2 = 0
|
||||
max_n2 = 0
|
||||
minbodytemp = 0
|
||||
|
||||
// break_stuff_probability = 2
|
||||
|
||||
faction = "scarybat"
|
||||
var/mob/living/owner
|
||||
|
||||
/mob/living/simple_animal/hostile/scarybat/New(loc, mob/living/L as mob)
|
||||
..()
|
||||
if(istype(L))
|
||||
owner = L
|
||||
|
||||
/mob/living/simple_animal/hostile/scarybat/Process_Spacemove(var/check_drift = 0)
|
||||
return ..() //No drifting in space for space carp! //original comments do not steal
|
||||
|
||||
/mob/living/simple_animal/hostile/scarybat/FindTarget()
|
||||
. = ..()
|
||||
if(.)
|
||||
emote("flutters towards [.]")
|
||||
|
||||
/mob/living/simple_animal/hostile/scarybat/AttackingTarget()
|
||||
. =..()
|
||||
var/mob/living/L = .
|
||||
if(istype(L))
|
||||
if(prob(15))
|
||||
L.Stun(1)
|
||||
L.visible_message("<span class='danger'>\the [src] scares \the [L]!</span>")
|
||||
@@ -26,6 +26,8 @@
|
||||
|
||||
if(isliving(A))
|
||||
var/mob/living/L = A
|
||||
if(istype(src, /mob/living/simple_animal/hostile/scarybat))
|
||||
if(src:owner == L) continue
|
||||
if(L.faction == src.faction && !attack_same)
|
||||
continue
|
||||
else if(L in friends)
|
||||
|
||||
@@ -225,6 +225,14 @@ datum
|
||||
if(!istype(M, /mob/living))
|
||||
return
|
||||
|
||||
// Put out fire
|
||||
if(method == TOUCH)
|
||||
M.adjust_fire_stacks(-(volume / 10))
|
||||
if(M.fire_stacks <= 0)
|
||||
M.ExtinguishMob()
|
||||
return
|
||||
|
||||
|
||||
// Grays treat water like acid.
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
@@ -297,14 +305,6 @@ datum
|
||||
if(!cube.wrapped)
|
||||
cube.Expand()
|
||||
return
|
||||
reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with water can help put them out!
|
||||
if(!istype(M, /mob/living))
|
||||
return
|
||||
if(method == TOUCH)
|
||||
M.adjust_fire_stacks(-(volume / 10))
|
||||
if(M.fire_stacks <= 0)
|
||||
M.ExtinguishMob()
|
||||
return
|
||||
|
||||
lube
|
||||
name = "Space Lube"
|
||||
@@ -600,7 +600,39 @@ datum
|
||||
ticker.mode.remove_cultist(M.mind)
|
||||
for(var/mob/O in viewers(M, null))
|
||||
O.show_message(text("\blue []'s eyes blink and become clearer.", M), 1) // So observers know it worked.
|
||||
// Vamps react to this like acid
|
||||
if((M.mind in ticker.mode.vampires) && prob(10))
|
||||
if(!M) M = holder.my_atom
|
||||
M.adjustToxLoss(1*REM)
|
||||
M.take_organ_damage(0, 1*REM)
|
||||
holder.remove_reagent(src.id, 10 * REAGENTS_METABOLISM) //high metabolism to prevent extended uncult rolls.
|
||||
|
||||
|
||||
reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with water can help put them out!
|
||||
// Vamps react to this like acid
|
||||
if(ishuman(M))
|
||||
if((M.mind in ticker.mode.vampires))
|
||||
var/mob/living/carbon/human/H=M
|
||||
if(method == TOUCH)
|
||||
if(H.wear_mask)
|
||||
H << "\red Your mask protects you from the holy water!"
|
||||
return
|
||||
if(H.head)
|
||||
H << "\red Your helmet protects you from the holy water!"
|
||||
return
|
||||
if(!M.unacidable)
|
||||
if(prob(15) && volume >= 30)
|
||||
var/datum/organ/external/affecting = H.get_organ("head")
|
||||
if(affecting)
|
||||
if(affecting.take_damage(25, 0))
|
||||
H.UpdateDamageIcon()
|
||||
H.status_flags |= DISFIGURED
|
||||
H.emote("scream")
|
||||
else
|
||||
M.take_organ_damage(min(15, volume * 2)) // uses min() and volume to make sure they aren't being sprayed in trace amounts (1 unit != insta rape) -- Doohl
|
||||
else
|
||||
if(!M.unacidable)
|
||||
M.take_organ_damage(min(15, volume * 2))
|
||||
return
|
||||
|
||||
serotrotium
|
||||
|
||||
@@ -100,6 +100,8 @@
|
||||
disease.stageprob = stageprob
|
||||
disease.antigen = antigen
|
||||
disease.uniqueID = uniqueID
|
||||
disease.speed = speed
|
||||
disease.stage = stage
|
||||
for(var/datum/disease2/effectholder/holder in effects)
|
||||
var/datum/disease2/effectholder/newholder = new /datum/disease2/effectholder
|
||||
newholder.effect = new holder.effect.type
|
||||
|
||||
@@ -141,7 +141,11 @@
|
||||
H << "<span class='notice'>You can't feel your [E.display_name] anymore...</span>"
|
||||
for (var/datum/organ/external/C in E.children)
|
||||
C.status |= ORGAN_DEAD
|
||||
mob.adjustToxLoss(15*multiplier)
|
||||
H.update_body(1)
|
||||
if(multiplier < 1) multiplier = 1
|
||||
H.adjustToxLoss(10*multiplier)
|
||||
vampire
|
||||
stage = 3
|
||||
|
||||
deactivate(var/mob/living/carbon/mob,var/multiplier)
|
||||
if(istype(mob, /mob/living/carbon/human))
|
||||
|
||||
Reference in New Issue
Block a user