[MIRROR] Icebox Wendigo Buff + Crusher Trophies (#3863)

* Icebox Wendigo Buff + Crusher Trophies (#56258)

Co-authored-by: Jonathan Church <jchurch093@ gmail.com>
Co-authored-by: s <wesoda24@ gmail.com>
Co-authored-by: spookydonut <github@ spooksoftware.com>
Co-authored-by: Rohesie <rohesie@ gmail.com>

* Icebox Wendigo Buff + Crusher Trophies

Co-authored-by: Whoneedspacee <yougotreallyowned@gmail.com>
Co-authored-by: Jonathan Church <jchurch093@ gmail.com>
Co-authored-by: s <wesoda24@ gmail.com>
Co-authored-by: spookydonut <github@ spooksoftware.com>
Co-authored-by: Rohesie <rohesie@ gmail.com>
This commit is contained in:
SkyratBot
2021-03-04 21:31:55 +00:00
committed by GitHub
co-authored by Jonathan Church s spookydonut Rohesie Whoneedspacee
parent ccb5486b44
commit 3ae323fb97
19 changed files with 3398 additions and 3089 deletions
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -837,6 +837,13 @@
/obj/item/stack/sheet/animalhide/ashdrake = 5)
category = CAT_PRIMAL
/datum/crafting_recipe/godslayer
name = "Godslayer Armour"
result = /obj/item/clothing/suit/hooded/cloak/godslayer
time = 60
reqs = list(/obj/item/ice_energy_crystal = 1, /obj/item/wendigo_skull = 1, /obj/item/clockwork_alloy = 1)
category = CAT_PRIMAL
/datum/crafting_recipe/firebrand
name = "Firebrand"
result = /obj/item/match/firebrand
+21
View File
@@ -510,3 +510,24 @@
to_chat(owner, "<span class='notice'>Your bloodlust seeps back into the bog of your subconscious and you regain self control.</span>")
owner.log_message("exited a blood frenzy", LOG_ATTACK)
QDEL_NULL(chainsaw)
/datum/status_effect/speed_boost
id = "speed_boost"
duration = 2 SECONDS
status_type = STATUS_EFFECT_REPLACE
/datum/status_effect/speed_boost/on_creation(mob/living/new_owner, set_duration)
if(isnum(set_duration))
duration = set_duration
. = ..()
/datum/status_effect/speed_boost/on_apply()
owner.add_movespeed_modifier(/datum/movespeed_modifier/status_speed_boost, update = TRUE)
return ..()
/datum/status_effect/speed_boost/on_remove()
owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_speed_boost, update = TRUE)
/datum/movespeed_modifier/status_speed_boost
multiplicative_slowdown = -1
+60
View File
@@ -94,6 +94,66 @@
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
resistance_flags = FIRE_PROOF | ACID_PROOF
/obj/item/clothing/suit/hooded/cloak/godslayer
name = "godslayer armour"
icon_state = "godslayer"
desc = "A suit of armour fashioned from the remnants of a knight's armor, and parts of a wendigo."
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe, /obj/item/spear)
armor = list("melee" = 50, "bullet" = 25, "laser" = 25, "energy" = 25, "bomb" = 50, "bio" = 50, "rad" = 100, "fire" = 100, "acid" = 100)
clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL
hoodtype = /obj/item/clothing/head/hooded/cloakhood/godslayer
cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
resistance_flags = FIRE_PROOF | ACID_PROOF | FREEZE_PROOF
transparent_protection = HIDEGLOVES|HIDESUITSTORAGE|HIDEJUMPSUIT|HIDESHOES
/// Amount to heal when the effect is triggered
var/heal_amount = 500
/// Time until the effect can take place again
var/effect_cooldown_time = 10 MINUTES
/// Current cooldown for the effect
COOLDOWN_DECLARE(effect_cooldown)
var/static/list/damage_heal_order = list(BRUTE, BURN, OXY)
/obj/item/clothing/head/hooded/cloakhood/godslayer
name = "godslayer helm"
icon_state = "godslayer"
desc = "The horns and skull of a wendigo, held together by the remaining icey energy of a demonic miner."
armor = list("melee" = 50, "bullet" = 25, "laser" = 25, "energy" = 25, "bomb" = 50, "bio" = 50, "rad" = 100, "fire" = 100, "acid" = 100)
clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL | SNUG_FIT
cold_protection = HEAD
min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
heat_protection = HEAD
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
flash_protect = FLASH_PROTECTION_WELDER
flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF
resistance_flags = FIRE_PROOF | ACID_PROOF | FREEZE_PROOF
/obj/item/clothing/suit/hooded/cloak/godslayer/examine(mob/user)
. = ..()
if(loc == user && !COOLDOWN_FINISHED(src, effect_cooldown))
. += "You feel like the revival effect will be able to occur again in [COOLDOWN_TIMELEFT(src, effect_cooldown) / 10] seconds."
/obj/item/clothing/suit/hooded/cloak/godslayer/equipped(mob/user, slot)
. = ..()
if(slot & ITEM_SLOT_OCLOTHING)
RegisterSignal(user, COMSIG_MOB_STATCHANGE, .proc/resurrect)
return
UnregisterSignal(user, COMSIG_MOB_STATCHANGE, .proc/resurrect)
/obj/item/clothing/suit/hooded/cloak/godslayer/dropped(mob/user)
..()
UnregisterSignal(user, COMSIG_MOB_STATCHANGE, .proc/resurrect)
/obj/item/clothing/suit/hooded/cloak/godslayer/proc/resurrect(mob/living/carbon/user, new_stat)
if(new_stat > CONSCIOUS && new_stat < DEAD && COOLDOWN_FINISHED(src, effect_cooldown))
user.heal_ordered_damage(heal_amount, damage_heal_order)
user.visible_message("<span class='notice'>[user] suddenly revives, as their armor swirls with demonic energy!</span>", "<span class='notice'>You suddenly feel invigorated!</span>")
playsound(user.loc, 'sound/magic/clockwork/ratvar_attack.ogg', 50)
COOLDOWN_START(src, effect_cooldown, effect_cooldown_time)
/obj/item/clothing/neck/cloak/skill_reward
var/associated_skill_path = /datum/skill
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE
@@ -0,0 +1,51 @@
/*
Difficulty: Very Easy
Was planned to be something more but due to the content freeze it unfortunately cannot be
I'd rather there be something than the clockwork ruin be entirely empty though so here is a basic mob
*/
/mob/living/simple_animal/hostile/megafauna/clockwork_defender
name = "the clockwork defender"
desc = "A traitorous clockwork knight who lived on, despite its creators destruction."
health = 300
maxHealth = 300
icon_state = "clockwork_defender"
icon_living = "clockwork_defender"
icon = 'icons/mob/icemoon/icemoon_monsters.dmi'
attack_verb_continuous = "slashes"
attack_verb_simple = "slash"
attack_sound = 'sound/weapons/bladeslice.ogg'
weather_immunities = list("snow")
speak_emote = list("roars")
armour_penetration = 40
melee_damage_lower = 20
melee_damage_upper = 20
vision_range = 9
aggro_vision_range = 9
speed = 5
move_to_delay = 5
rapid_melee = 2 // every second
melee_queue_distance = 20
ranged = TRUE
gps_name = "Clockwork Signal"
loot = list(/obj/item/clockwork_alloy)
crusher_loot = list(/obj/item/clockwork_alloy)
wander = FALSE
del_on_death = TRUE
deathmessage = "falls, quickly decaying into centuries old dust."
deathsound = "bodyfall"
footstep_type = FOOTSTEP_MOB_HEAVY
attack_action_types = list()
/mob/living/simple_animal/hostile/megafauna/clockwork_defender/OpenFire()
return
/obj/item/clockwork_alloy
name = "clockwork alloy"
desc = "The remains of the strongest clockwork knight."
icon = 'icons/obj/ice_moon/artifacts.dmi'
icon_state = "clockwork_alloy"
w_class = WEIGHT_CLASS_TINY
throwforce = 0
@@ -31,8 +31,8 @@ Difficulty: Extremely Hard
move_to_delay = 20
gps_name = "Bloodchilling Signal"
ranged = TRUE
crusher_loot = list(/obj/effect/decal/remains/plasma, /obj/item/crusher_trophy/ice_block_talisman)
loot = list(/obj/effect/decal/remains/plasma)
crusher_loot = list(/obj/effect/decal/remains/plasma, /obj/item/crusher_trophy/ice_block_talisman, /obj/item/ice_energy_crystal)
loot = list(/obj/effect/decal/remains/plasma, /obj/item/ice_energy_crystal)
wander = FALSE
del_on_death = TRUE
blood_volume = BLOOD_VOLUME_NORMAL
@@ -421,6 +421,14 @@ Difficulty: Extremely Hard
owner.cut_overlay(cube)
UnregisterSignal(owner, COMSIG_MOVABLE_PRE_MOVE)
/obj/item/ice_energy_crystal
name = "ice energy crystal"
desc = "Remnants of the demonic frost miners ice energy."
icon = 'icons/obj/ice_moon/artifacts.dmi'
icon_state = "ice_crystal"
w_class = WEIGHT_CLASS_TINY
throwforce = 0
/obj/structure/frost_miner_prism
name = "frost miner light prism"
desc = "A magical crystal enhanced by a demonic presence."
@@ -1,3 +1,11 @@
#define WENDIGO_ENRAGED (health <= maxHealth*0.5)
#define WENDIGO_CIRCLE_SHOTCOUNT 24
#define WENDIGO_CIRCLE_REPEATCOUNT 8
#define WENDIGO_SPIRAL_SHOTCOUNT 40
#define WENDIGO_WAVE_SHOTCOUNT 7
#define WENDIGO_WAVE_REPEATCOUNT 32
#define WENDIGO_SHOTGUN_SHOTCOUNT 5
/*
Difficulty: Hard
@@ -23,18 +31,18 @@ Difficulty: Hard
melee_damage_upper = 40
vision_range = 9
aggro_vision_range = 18 // man-eating for a reason
speed = 8
move_to_delay = 8
rapid_melee = 16 // every 1/8 second
melee_queue_distance = 20 // as far as possible really, need this because of charging and teleports
speed = 6
move_to_delay = 6
rapid_melee = 8 // every 1/4 second
melee_queue_distance = 18 // as far as possible really, need this because of charging and teleports
ranged = TRUE
pixel_x = -16
base_pixel_x = -16
gps_name = "Berserk Signal"
loot = list()
butcher_results = list()
guaranteed_butcher_results = list(/obj/item/wendigo_blood = 1)
crusher_loot = list(/obj/item/crusher_trophy/demon_claws)
guaranteed_butcher_results = list(/obj/item/wendigo_blood = 1, /obj/item/wendigo_skull = 1)
crusher_loot = list(/obj/item/crusher_trophy/wendigo_horn)
wander = FALSE
del_on_death = FALSE
blood_volume = BLOOD_VOLUME_NORMAL
@@ -46,7 +54,7 @@ Difficulty: Hard
footstep_type = FOOTSTEP_MOB_HEAVY
attack_action_types = list(/datum/action/innate/megafauna_attack/heavy_stomp,
/datum/action/innate/megafauna_attack/teleport,
/datum/action/innate/megafauna_attack/disorienting_scream)
/datum/action/innate/megafauna_attack/shockwave_scream)
/// Saves the turf the megafauna was created at (spawns exit portal here)
var/turf/starting
/// Range for wendigo stomping when it moves
@@ -55,8 +63,10 @@ Difficulty: Hard
var/stored_move_dirs = 0
/// If the wendigo is allowed to move
var/can_move = TRUE
/// Time before the wendigo can scream again
var/scream_cooldown_time = 10 SECONDS
/// Stores the last scream time so it doesn't spam it
var/last_scream = 0
COOLDOWN_DECLARE(scream_cooldown)
/datum/action/innate/megafauna_attack/heavy_stomp
name = "Heavy Stomp"
@@ -72,8 +82,8 @@ Difficulty: Hard
chosen_message = "<span class='colossus'>You are now teleporting at the target you click on.</span>"
chosen_attack_num = 2
/datum/action/innate/megafauna_attack/disorienting_scream
name = "Disorienting Scream"
/datum/action/innate/megafauna_attack/shockwave_scream
name = "Shockwave Scream"
icon_icon = 'icons/turf/walls/wall.dmi'
button_icon_state = "wall-0"
chosen_message = "<span class='colossus'>You are now screeching, disorienting targets around you.</span>"
@@ -84,11 +94,10 @@ Difficulty: Hard
starting = get_turf(src)
/mob/living/simple_animal/hostile/megafauna/wendigo/OpenFire()
SetRecoveryTime(0, 100)
if(health <= maxHealth*0.5)
stomp_range = 2
speed = 6
move_to_delay = 6
SetRecoveryTime(10 SECONDS)
if(WENDIGO_ENRAGED)
speed = 4
move_to_delay = 4
else
stomp_range = initial(stomp_range)
speed = initial(speed)
@@ -99,12 +108,12 @@ Difficulty: Hard
if(1)
heavy_stomp()
if(2)
teleport()
try_teleport()
if(3)
disorienting_scream()
shockwave_scream()
return
if(world.time > last_scream + 60)
if(COOLDOWN_FINISHED(src, scream_cooldown))
chosen_attack = rand(1, 3)
else
chosen_attack = rand(1, 2)
@@ -112,17 +121,10 @@ Difficulty: Hard
if(1)
heavy_stomp()
if(2)
teleport()
try_teleport()
if(3)
disorienting_scream()
/mob/living/simple_animal/hostile/megafauna/wendigo/Life(delta_time = SSMOBS_DT, times_fired)
. = ..()
if(!.)
return
if(target || get_dist(src, starting) < 12)
return
do_teleport(src, starting, 0, channel=TELEPORT_CHANNEL_BLUESPACE, forced = TRUE)
do_teleport(src, starting, 0, channel=TELEPORT_CHANNEL_BLUESPACE, forced = TRUE)
shockwave_scream()
/mob/living/simple_animal/hostile/megafauna/wendigo/Move(atom/newloc, direct)
if(!can_move)
@@ -134,62 +136,128 @@ Difficulty: Hard
. = ..()
stored_move_dirs &= ~direct
if(!stored_move_dirs)
INVOKE_ASYNC(src, .proc/ground_slam, stomp_range, 1)
INVOKE_ASYNC(GLOBAL_PROC, .proc/wendigo_slam, src, stomp_range, 1, 8)
/// Slams the ground around the wendigo throwing back enemies caught nearby
/mob/living/simple_animal/hostile/megafauna/wendigo/proc/ground_slam(range, delay)
var/turf/orgin = get_turf(src)
/// Slams the ground around the source throwing back enemies caught nearby, delay is for the radius increase
/proc/wendigo_slam(atom/source, range, delay, throw_range)
var/turf/orgin = get_turf(source)
var/list/all_turfs = RANGE_TURFS(range, orgin)
for(var/i = 0 to range)
for(var/turf/T in all_turfs)
if(get_dist(orgin, T) > i)
playsound(orgin,'sound/effects/bamf.ogg', 600, TRUE, 10)
for(var/turf/stomp_turf in all_turfs)
if(get_dist(orgin, stomp_turf) > i)
continue
playsound(T,'sound/effects/bamf.ogg', 600, TRUE, 10)
new /obj/effect/temp_visual/small_smoke/halfsecond(T)
for(var/mob/living/L in T)
if(L == src || L.throwing)
new /obj/effect/temp_visual/small_smoke/halfsecond(stomp_turf)
for(var/mob/living/L in stomp_turf)
if(L == source || L.throwing)
continue
to_chat(L, "<span class='userdanger'>[src]'s ground slam shockwave sends you flying!</span>")
var/turf/thrownat = get_ranged_target_turf_direct(src, L, 8, rand(-10, 10))
L.throw_at(thrownat, 8, 2, src, TRUE, force = MOVE_FORCE_OVERPOWERING, gentle = TRUE)
to_chat(L, "<span class='userdanger'>[source]'s ground slam shockwave sends you flying!</span>")
var/turf/thrownat = get_ranged_target_turf_direct(source, L, throw_range, rand(-10, 10))
L.throw_at(thrownat, 8, 2, null, TRUE, force = MOVE_FORCE_OVERPOWERING, gentle = TRUE)
L.apply_damage(20, BRUTE, wound_bonus=CANT_WOUND)
shake_camera(L, 2, 1)
all_turfs -= T
all_turfs -= stomp_turf
sleep(delay)
/// Larger but slower ground stomp
/mob/living/simple_animal/hostile/megafauna/wendigo/proc/heavy_stomp()
can_move = FALSE
ground_slam(5, 2)
SetRecoveryTime(0, 0)
wendigo_slam(src, 5, 3 - WENDIGO_ENRAGED, 8)
SetRecoveryTime(0 SECONDS)
can_move = TRUE
/// Teleports to a location 4 turfs away from the enemy in view
/mob/living/simple_animal/hostile/megafauna/wendigo/proc/teleport()
var/list/possible_ends = list()
for(var/turf/T in view(4, target.loc) - view(3, target.loc))
if(isclosedturf(T))
continue
possible_ends |= T
if (LAZYLEN(possible_ends))
var/turf/end = pick(possible_ends)
do_teleport(src, end, 0, channel=TELEPORT_CHANNEL_BLUESPACE, forced = TRUE)
SetRecoveryTime(20, 0)
/mob/living/simple_animal/hostile/megafauna/wendigo/proc/try_teleport()
teleport(6)
if(WENDIGO_ENRAGED)
playsound(loc, 'sound/magic/clockwork/invoke_general.ogg', 100, TRUE)
for(var/shots in 1 to WENDIGO_SHOTGUN_SHOTCOUNT)
var/spread = shots * 10 - 30
var/turf/startloc = get_step(get_turf(src), get_dir(src, target))
var/turf/endloc = get_turf(target)
if(!endloc)
break
var/obj/projectile/wendigo_shockwave/shockwave = new /obj/projectile/wendigo_shockwave(loc)
shockwave.speed = 8
shockwave.preparePixelProjectile(endloc, startloc, null, spread)
shockwave.firer = src
if(target)
shockwave.original = target
shockwave.fire()
SetRecoveryTime(0 SECONDS)
/// Applies dizziness to all nearby enemies that can hear the scream and animates the wendigo shaking up and down
/mob/living/simple_animal/hostile/megafauna/wendigo/proc/disorienting_scream()
/mob/living/simple_animal/hostile/megafauna/wendigo/proc/teleport(range = 6)
var/list/possible_ends = view(range, target.loc) - view(range - 1, target.loc)
for(var/turf/closed/cant_teleport_turf in possible_ends)
possible_ends -= cant_teleport_turf
if(!possible_ends.len)
return
var/turf/end = pick(possible_ends)
do_teleport(src, end, 0, channel=TELEPORT_CHANNEL_BLUESPACE, forced = TRUE)
/// Applies dizziness to all nearby enemies that can hear the scream and animates the wendigo shaking up and down as shockwave projectiles shoot outward
/mob/living/simple_animal/hostile/megafauna/wendigo/proc/shockwave_scream()
can_move = FALSE
last_scream = world.time
playsound(src, 'sound/magic/demon_dies.ogg', 600, FALSE, 10)
animate(src, pixel_z = rand(5, 15), time = 1, loop = 6)
COOLDOWN_START(src, scream_cooldown, scream_cooldown_time)
SLEEP_CHECK_DEATH(5)
playsound(loc, 'sound/magic/demon_dies.ogg', 600, FALSE, 10)
animate(src, pixel_z = rand(5, 15), time = 1, loop = 20)
animate(pixel_z = 0, time = 1)
for(var/mob/living/L in get_hearers_in_view(7, src) - src)
L.Dizzy(6)
to_chat(L, "<span class='danger'>[src] screams loudly!</span>")
SetRecoveryTime(30, 0)
SLEEP_CHECK_DEATH(12)
for(var/mob/living/dizzy_target in get_hearers_in_view(7, src) - src)
dizzy_target.Dizzy(6)
to_chat(dizzy_target, "<span class='danger'>The wendigo screams loudly!</span>")
SLEEP_CHECK_DEATH(1 SECONDS)
spiral_attack()
SetRecoveryTime(3 SECONDS)
SLEEP_CHECK_DEATH(3 SECONDS)
can_move = TRUE
teleport()
/// Shoots shockwave projectiles in a random preset pattern
/mob/living/simple_animal/hostile/megafauna/wendigo/proc/spiral_attack()
var/list/choices = list("Alternating Circle", "Spiral")
if(WENDIGO_ENRAGED)
choices += "Wave"
var/spiral_type = pick(choices)
switch(spiral_type)
if("Alternating Circle")
var/shots_per = WENDIGO_CIRCLE_SHOTCOUNT
for(var/shoot_times in 1 to WENDIGO_CIRCLE_REPEATCOUNT)
var/offset = shoot_times % 2
for(var/shot in 1 to shots_per)
var/angle = shot * 360 / shots_per + (offset * 360 / shots_per) * 0.5
var/obj/projectile/wendigo_shockwave/shockwave = new /obj/projectile/wendigo_shockwave(loc)
shockwave.firer = src
shockwave.speed = 3 - WENDIGO_ENRAGED
shockwave.fire(angle)
SLEEP_CHECK_DEATH(6 - WENDIGO_ENRAGED * 2)
if("Spiral")
var/shots_spiral = WENDIGO_SPIRAL_SHOTCOUNT
var/angle_to_target = Get_Angle(src, target)
var/spiral_direction = pick(-1, 1)
for(var/shot in 1 to shots_spiral)
var/shots_per_tick = 5 - WENDIGO_ENRAGED * 3
var/angle_change = (5 + WENDIGO_ENRAGED * shot / 6) * spiral_direction
for(var/count in 1 to shots_per_tick)
var/angle = angle_to_target + shot * angle_change + count * 360 / shots_per_tick
var/obj/projectile/wendigo_shockwave/shockwave = new /obj/projectile/wendigo_shockwave(loc)
shockwave.firer = src
shockwave.damage = 15
shockwave.fire(angle)
SLEEP_CHECK_DEATH(1)
if("Wave")
var/shots_per = WENDIGO_WAVE_SHOTCOUNT
var/difference = 360 / shots_per
var/wave_direction = pick(-1, 1)
for(var/shoot_times in 1 to WENDIGO_WAVE_REPEATCOUNT)
for(var/shot in 1 to shots_per)
var/angle = shot * difference + shoot_times * 5 * wave_direction * -1
var/obj/projectile/wendigo_shockwave/shockwave = new /obj/projectile/wendigo_shockwave(loc)
shockwave.firer = src
shockwave.wave_movement = TRUE
shockwave.speed = 8
shockwave.wave_speed = 10 * wave_direction
shockwave.fire(angle)
SLEEP_CHECK_DEATH(2)
/mob/living/simple_animal/hostile/megafauna/wendigo/death(gibbed, list/force_grant)
if(health > 0)
@@ -200,6 +268,28 @@ Difficulty: Hard
exit.set_light(20, 1, COLOR_SOFT_RED)
return ..()
/obj/projectile/wendigo_shockwave
name ="wendigo shockwave"
icon_state= "chronobolt"
damage = 25
armour_penetration = 100
speed = 2
eyeblur = 5
damage_type = BRUTE
pass_flags = PASSTABLE
/// If wave movement is enabled
var/wave_movement = FALSE
/// Amount the angle changes every pixel move
var/wave_speed = 15
/// Amount of movements this projectile has made
var/pixel_moves = 0
/obj/projectile/wendigo_shockwave/pixel_move(trajectory_multiplier, hitscanning = FALSE)
. = ..()
if(wave_movement)
pixel_moves++
set_angle(original_angle + pixel_moves * wave_speed)
/obj/item/wendigo_blood
name = "bottle of wendigo blood"
desc = "You're not actually going to drink this, are you?"
@@ -209,13 +299,13 @@ Difficulty: Hard
/obj/item/wendigo_blood/attack_self(mob/living/user)
if(!ishuman(user))
return
var/mob/living/carbon/human/H = user
if(!H.mind)
var/mob/living/carbon/human/human_user = user
if(!human_user.mind)
return
to_chat(H, "<span class='danger'>Power courses through you! You can now shift your form at will.</span>")
var/obj/effect/proc_holder/spell/targeted/shapeshift/polar_bear/P = new
H.mind.AddSpell(P)
playsound(H.loc,'sound/items/drink.ogg', rand(10,50), TRUE)
to_chat(human_user, "<span class='danger'>Power courses through you! You can now shift your form at will.</span>")
var/obj/effect/proc_holder/spell/targeted/shapeshift/polar_bear/transformation_spell = new
human_user.mind.AddSpell(transformation_spell)
playsound(human_user.loc, 'sound/items/drink.ogg', rand(10,50), TRUE)
qdel(src)
/obj/effect/proc_holder/spell/targeted/shapeshift/polar_bear
@@ -224,3 +314,37 @@ Difficulty: Hard
invocation = "RAAAAAAAAWR!"
convert_damage = FALSE
shapeshift_type = /mob/living/simple_animal/hostile/asteroid/polarbear/lesser
/obj/item/crusher_trophy/wendigo_horn
name = "wendigo horn"
desc = "A horn from the head of an unstoppable beast."
icon_state = "wendigo_horn"
denied_type = /obj/item/crusher_trophy/wendigo_horn
/obj/item/crusher_trophy/wendigo_horn/effect_desc()
return "melee hits inflict twice as much damage"
/obj/item/crusher_trophy/wendigo_horn/add_to(obj/item/kinetic_crusher/crusher, mob/living/user)
. = ..()
if(.)
crusher.AddComponent(/datum/component/two_handed, force_wielded=40)
/obj/item/crusher_trophy/wendigo_horn/remove_from(obj/item/kinetic_crusher/crusher, mob/living/user)
. = ..()
if(.)
crusher.AddComponent(/datum/component/two_handed, force_wielded=20)
/obj/item/wendigo_skull
name = "wendigo skull"
desc = "A skull of a massive hulking beast."
icon = 'icons/obj/ice_moon/artifacts.dmi'
icon_state = "wendigo_skull"
w_class = WEIGHT_CLASS_TINY
throwforce = 0
#undef WENDIGO_CIRCLE_SHOTCOUNT
#undef WENDIGO_CIRCLE_REPEATCOUNT
#undef WENDIGO_SPIRAL_SHOTCOUNT
#undef WENDIGO_WAVE_SHOTCOUNT
#undef WENDIGO_WAVE_REPEATCOUNT
#undef WENDIGO_SHOTGUN_SHOTCOUNT
@@ -15,7 +15,7 @@
projectilesound = 'sound/weapons/pierce.ogg'
ranged = TRUE
ranged_message = "manifests ice"
ranged_cooldown_time = 3 SECONDS
ranged_cooldown_time = 1.5 SECONDS
minimum_distance = 3
retreat_distance = 3
maxHealth = 150
@@ -10,7 +10,7 @@
friendly_verb_continuous = "growls at"
friendly_verb_simple = "growl at"
speak_emote = list("growls")
speed = 8
speed = 3
move_to_delay = 8
maxHealth = 300
health = 300
@@ -28,6 +28,7 @@
butcher_results = list(/obj/item/food/meat/slab/bear = 3, /obj/item/stack/sheet/bone = 2)
guaranteed_butcher_results = list(/obj/item/stack/sheet/animalhide/goliath_hide/polar_bear_hide = 1)
loot = list()
crusher_loot = /obj/item/crusher_trophy/bear_paw
stat_attack = HARD_CRIT
robust_searching = TRUE
footstep_type = FOOTSTEP_MOB_CLAW
@@ -61,3 +62,20 @@
name = "magic polar bear"
desc = "It seems sentient somehow."
faction = list("neutral")
/obj/item/crusher_trophy/bear_paw
name = "polar bear paw"
desc = "It's a polar bear paw."
icon_state = "bear_paw"
denied_type = /obj/item/crusher_trophy/bear_paw
/obj/item/crusher_trophy/bear_paw/effect_desc()
return "mark detonation to attack twice if you are below half your life"
/obj/item/crusher_trophy/bear_paw/on_mark_detonation(mob/living/target, mob/living/user)
if(user.health / user.maxHealth > 0.5)
return
var/obj/item/I = user.get_active_held_item()
if(!I)
return
I.melee_attack_chain(user, target, null)
@@ -30,6 +30,7 @@
pull_force = MOVE_FORCE_WEAK
butcher_results = list(/obj/item/food/meat/slab = 2, /obj/item/stack/sheet/sinew/wolf = 2, /obj/item/stack/sheet/bone = 2)
loot = list()
crusher_loot = /obj/item/crusher_trophy/wolf_ear
stat_attack = HARD_CRIT
robust_searching = TRUE
footstep_type = FOOTSTEP_MOB_CLAW
@@ -57,3 +58,15 @@
return
adjustHealth(-0.0125 * maxHealth * delta_time)
retreat_message_said = FALSE
/obj/item/crusher_trophy/wolf_ear
name = "wolf ear"
desc = "It's a wolf ear."
icon_state = "wolf_ear"
denied_type = /obj/item/crusher_trophy/wolf_ear
/obj/item/crusher_trophy/wolf_ear/effect_desc()
return "mark detonation to gain a slight speed boost temporarily"
/obj/item/crusher_trophy/wolf_ear/on_mark_detonation(mob/living/target, mob/living/user)
user.apply_status_effect(/datum/status_effect/speed_boost, 1 SECONDS)
Binary file not shown.

Before

Width:  |  Height:  |  Size: 226 KiB

After

Width:  |  Height:  |  Size: 221 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 423 KiB

After

Width:  |  Height:  |  Size: 411 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 111 KiB

After

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 149 KiB

After

Width:  |  Height:  |  Size: 149 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 731 B

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 30 KiB

+1
View File
@@ -2681,6 +2681,7 @@
#include "code\modules\mob\living\simple_animal\hostile\jungle\seedling.dm"
#include "code\modules\mob\living\simple_animal\hostile\megafauna\blood_drunk_miner.dm"
#include "code\modules\mob\living\simple_animal\hostile\megafauna\bubblegum.dm"
#include "code\modules\mob\living\simple_animal\hostile\megafauna\clockwork_knight.dm"
#include "code\modules\mob\living\simple_animal\hostile\megafauna\colossus.dm"
#include "code\modules\mob\living\simple_animal\hostile\megafauna\demonic_frost_miner.dm"
#include "code\modules\mob\living\simple_animal\hostile\megafauna\drake.dm"