Vampire Gamemode!

This commit is contained in:
ZomgPonies
2013-12-13 19:38:49 -05:00
parent 25becb2c49
commit 912601a30d
22 changed files with 1013 additions and 25 deletions
+1
View File
@@ -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)
+40 -8
View File
@@ -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
+2
View File
@@ -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
+5 -1
View File
@@ -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))