diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm
index 6ac2c81500a..331f74b9d85 100644
--- a/code/modules/mob/living/say.dm
+++ b/code/modules/mob/living/say.dm
@@ -241,7 +241,7 @@ proc/get_radio_key_from_channel(var/channel)
italics = 1
sound_vol *= 0.5 //muffle the sound a bit, so it's like we're actually talking through contact
- var/list/hear = get_mobs_or_objects_in_view(message_range,src)
+ var/list/hear = hear(message_range,T)
var/list/hearturfs = list()
for(var/I in hear)
diff --git a/code/modules/mob/living/simple_animal/familiars/familiars.dm b/code/modules/mob/living/simple_animal/familiars/familiars.dm
index dd71b81fb62..65381052111 100644
--- a/code/modules/mob/living/simple_animal/familiars/familiars.dm
+++ b/code/modules/mob/living/simple_animal/familiars/familiars.dm
@@ -13,6 +13,9 @@
min_oxy = 1 //still require a /bit/ of air.
max_co2 = 0
unsuitable_atoms_damage = 1
+
+ hunger_enabled = 0
+ supernatural = 1
var/list/wizardy_spells = list()
@@ -24,7 +27,7 @@
/mob/living/simple_animal/familiar/carcinus
name = "crab"
- desc = "An odd looking crab."
+ desc = "A small crab said to be made of stone and starlight."
icon = 'icons/mob/animal.dmi'
icon_state = "evilcrab"
icon_living = "evilcrab"
@@ -37,7 +40,8 @@
maxHealth = 200
melee_damage_lower = 10
melee_damage_upper = 15
- attacktext = "pinches"
+ friendly = "pinches"
+ attacktext = "pinched"
resistance = 9
@@ -52,11 +56,16 @@
pixel_x = -16
speak_emote = list("gnashes")
+ attacktext = "bitten"
+ attack_sound = 'sound/weapons/bite.ogg'
+ environment_smash = 2
health = 100
maxHealth = 100
- melee_damage_lower = 10
- melee_damage_upper = 10
+ melee_damage_lower = 15
+ melee_damage_upper = 15
+
+ meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat
min_oxy = 0
@@ -76,11 +85,12 @@
response_help = "thinks better of touching"
+ environment_smash = 2
health = 150
maxHealth = 150
- melee_damage_lower = 5
- melee_damage_upper = 8
- attacktext = "touches"
+ melee_damage_lower = 10
+ melee_damage_upper = 10
+ attacktext = "clawed"
wizardy_spells = list(/spell/targeted/torment)
@@ -99,6 +109,7 @@
icon_living = "goat"
icon_dead = "goat_dead"
speak_emote = list("brays")
+ attacktext = "kicked"
mob_size = MOB_SMALL
@@ -144,13 +155,16 @@
pass_flags = PASSTABLE
mob_size = MOB_MINISCULE
+ see_in_dark = 8
+ see_invisible = SEE_INVISIBLE_NOLIGHTING
+
response_harm = "stamps on"
health = 15
maxHealth = 15
melee_damage_lower = 1
melee_damage_upper = 1
- attacktext = "nibbles"
+ attacktext = "nibbled"
wizardy_spells = list(/spell/aoe_turf/smoke)
@@ -168,6 +182,8 @@
icon_dead = "cat3_dead"
icon_rest = "cat3_rest"
+ see_in_dark = 8
+ see_invisible = SEE_INVISIBLE_NOLIGHTING
speak_emote = list("meows", "purrs")
holder_type = /obj/item/weapon/holder/cat
@@ -177,6 +193,6 @@
maxHealth = 25
melee_damage_lower = 3
melee_damage_upper = 4
- attacktext = "claws"
+ attacktext = "clawed"
wizardy_spells = list(/spell/targeted/subjugation)
diff --git a/code/modules/mob/living/simple_animal/hostile/faithless.dm b/code/modules/mob/living/simple_animal/hostile/faithless.dm
index 44d9c5d1ac4..02b0c0b18ae 100644
--- a/code/modules/mob/living/simple_animal/hostile/faithless.dm
+++ b/code/modules/mob/living/simple_animal/hostile/faithless.dm
@@ -12,6 +12,7 @@
speed = -1
maxHealth = 80
health = 80
+ environment_smash = 2
harm_intent_damage = 10
melee_damage_lower = 15
diff --git a/code/modules/spells/targeted/ethereal_jaunt.dm b/code/modules/spells/targeted/ethereal_jaunt.dm
index 002214b737c..11a45ac26b8 100644
--- a/code/modules/spells/targeted/ethereal_jaunt.dm
+++ b/code/modules/spells/targeted/ethereal_jaunt.dm
@@ -18,7 +18,8 @@
/spell/targeted/ethereal_jaunt/cast(list/targets) //magnets, so mostly hardcoded
for(var/mob/living/target in targets)
target.transforming = 1 //protects the mob from being transformed (replaced) midjaunt and getting stuck in bluespace
- if(target.buckled) target.buckled = null
+ if(target.buckled)
+ target.buckled.unbuckle_mob()
spawn(0)
var/mobloc = get_turf(target.loc)
var/obj/effect/dummy/spell_jaunt/holder = new /obj/effect/dummy/spell_jaunt( mobloc )
diff --git a/code/modules/spells/targeted/necromancer_spells.dm b/code/modules/spells/targeted/necromancer_spells.dm
index a8c168e7612..54940aabb18 100644
--- a/code/modules/spells/targeted/necromancer_spells.dm
+++ b/code/modules/spells/targeted/necromancer_spells.dm
@@ -47,25 +47,25 @@
hud_state = "wiz_vampire"
cast_sound = 'sound/magic/enter_blood.ogg'
-
- amt_dam_brute = 15
- amt_dam_fire = 15
-
message = "You feel a sickening feeling as your body weakens."
-/spell/targeted/life_steal/cast(var/list/targets, var/mob/living/carbon/human/caster)
- for(var/mob/M in targets)
- if(!(M.stat == DEAD))
+ amt_dam_brute = 15
+ amt_dam_fire = 15
+
+/spell/targeted/life_steal/cast(list/targets, mob/living/user)
+ for(var/mob/living/M in targets)
+ if(M.stat == DEAD)
user << "There is no left life to steal."
return
- if(isipc(target))
+ if(isipc(M))
user << "There is no life to steal."
return
- M.visible_message("Blood flows from \the [M] into \the [caster]!")
- caster.adjustBruteLoss(-15)
- caster.adjustFireLoss(-15)
+ M.visible_message("Blood flows from \the [M] into \the [user]!")
+ gibs(M.loc)
+ user.adjustBruteLoss(-15)
+ user.adjustFireLoss(-15)
- ..()
+ ..()
/spell/targeted/raise_dead
name = "Raise Dead"
@@ -139,16 +139,17 @@
invocation_type = SpI_EMOTE
invocation = "entones an obscure chant..."
max_targets = 1
+ level_max = list(Sp_TOTAL = 0, Sp_SPEED = 0, Sp_POWER = 0)
hud_state = "wiz_lich"
/spell/targeted/lichdom/cast(mob/target,var/mob/living/carbon/human/user as mob)
- if(isskeleton(target))
+ if(isskeleton(user))
user << "You have no soul or life to offer."
return
user.visible_message("\The [user]'s skin sloughs off bone, their blood boils and guts turn to dust!")
- new /obj/effect/gibspawner/human
+ gibs(user.loc)
user.verbs += /mob/living/carbon/proc/immortality
user.set_species("Skeleton")
user.unEquip(user.wear_suit)
diff --git a/code/modules/spells/targeted/projectile/magic_missile.dm b/code/modules/spells/targeted/projectile/magic_missile.dm
index 7c8c3b00b91..5f6390a21d9 100644
--- a/code/modules/spells/targeted/projectile/magic_missile.dm
+++ b/code/modules/spells/targeted/projectile/magic_missile.dm
@@ -23,6 +23,7 @@
amt_stunned = 3
amt_dam_fire = 10
+ cast_prox_range = 0
/spell/targeted/projectile/magic_missile/prox_cast(var/list/targets, atom/spell_holder)
spell_holder.visible_message("\The [spell_holder] pops with a flash!")
diff --git a/code/modules/spells/targeted/shapeshift.dm b/code/modules/spells/targeted/shapeshift.dm
index c9b8800860d..d6dd2ad2b10 100644
--- a/code/modules/spells/targeted/shapeshift.dm
+++ b/code/modules/spells/targeted/shapeshift.dm
@@ -24,6 +24,10 @@
if(M.stat == DEAD)
user << "[name] can only transform living targets."
continue
+
+ if(M.buckled)
+ M.buckled.unbuckle_mob()
+
var/new_mob = pick(possible_transformations)
var/mob/living/trans = new new_mob(get_turf(M))
@@ -76,7 +80,7 @@
feedback = "BP"
possible_transformations = list(/mob/living/simple_animal/lizard,/mob/living/simple_animal/mouse,/mob/living/simple_animal/corgi)
-
+ share_damage = 0
invocation = "Yo'balada!"
invocation_type = SpI_SHOUT
spell_flags = NEEDSCLOTHES | SELECTABLE
@@ -86,6 +90,8 @@
level_max = list(Sp_TOTAL = 2, Sp_SPEED = 2, Sp_POWER = 2)
+ newVars = list("health" = 50, "maxHealth" = 50)
+
hud_state = "wiz_poly"
@@ -98,13 +104,15 @@
return "Your target will now stay in their polymorphed form for [duration/10] seconds."
/spell/targeted/shapeshift/avian
- name = "Avian Form"
+ name = "Polymorph"
desc = "This spell transforms the wizard into the common parrot."
feedback = "AV"
possible_transformations = list(/mob/living/simple_animal/parrot)
invocation = "Poli'crakata!"
invocation_type = SpI_SHOUT
+ drop_items = 0
+ share_damage = 0
spell_flags = INCLUDEUSER
range = -1
duration = 150
@@ -143,9 +151,9 @@
return "You will now stay corrupted for [duration/10] seconds."
if(2)
newVars = list("name" = "\proper corruption incarnate",
- "melee_damage_upper" = 25,
+ "melee_damage_upper" = 35,
"resistance" = 6,
- "health" = 125,
- "maxHealth" = 125)
+ "health" = 250,
+ "maxHealth" = 250)
duration = 0
return "You revel in the corruption. There is no turning back."