Merge remote-tracking branch 'upstream/master' into shep-dev-barky-noises

This commit is contained in:
Rykka Stormheart
2023-03-04 16:01:30 -08:00
110 changed files with 7400 additions and 3436 deletions
@@ -244,6 +244,7 @@
if(!voice_sound)
character.voice_sounds_list = talk_sound
else
/* CHOMPREMOVAL, redundant list
switch(voice_sound)
if("beep-boop")
character.voice_sounds_list = talk_sound
@@ -273,6 +274,8 @@
character.voice_sounds_list = goon_speak_roach_sound
if("goon speak skelly")
character.voice_sounds_list = goon_speak_skelly_sound
*/ //CHOMPREMOVAL, redundant list
character.voice_sounds_list = get_talk_sound(voice_sound)
character.species?.blood_color = blood_color
@@ -16,6 +16,10 @@
display_name = "Vorespawn - Pred"
msg = "has arrived on the station"
/datum/spawnpoint/vore/itemtf
display_name = "Item TF spawn"
msg = "has arrived on the station"
/datum/spawnpoint/vore/New()
..()
turfs = latejoin
@@ -85,7 +85,7 @@
/area/survivalpod/superpose/RestaurationBar
/area/survivalpod/superpose/BordcastingPod
/area/survivalpod/superpose/BroadcastingPod
/area/survivalpod/superpose/DemonPoolV2
@@ -260,10 +260,10 @@
name = "Resto-Bar"
description = "A large restaurant for food and drink, two overnight rental rooms and a small garden."
/datum/map_template/shelter/superpose/BordcastingPod
shelter_id = "BordcastingPod"
mappath = "modular_chomp/maps/submaps/shelters/BrodcastingPod-11x9.dmm"
name = "Brodcasting Pod"
/datum/map_template/shelter/superpose/BroadcastingPod
shelter_id = "BroadcastingPod"
mappath = "modular_chomp/maps/submaps/shelters/BroadcastingPod-11x9.dmm"
name = "Broadcasting Pod"
description = "A small NanoTransen news pod, everything you need to start live news in the most inhospitable places!"
/datum/map_template/shelter/superpose/DemonPoolV2
@@ -357,6 +357,7 @@
H.SetBlinded(0)
H.eye_blurry = 0
H.ear_deaf = 0
H.deaf_loop.stop() // CHOMPStation Add: Ear Ringing/Deafness
H.ear_damage = 0
H.heal_overall_damage(H.getActualBruteLoss(), H.getActualFireLoss(), 1)
for(var/I in H.organs_by_name)
@@ -573,4 +574,4 @@
if("l_hand")
usr.unEquip(src)
usr.put_in_l_hand(src)
src.add_fingerprint(usr)
src.add_fingerprint(usr)
+29 -17
View File
@@ -1,3 +1,32 @@
/mob/living
// var/ear_deaf_loop = FALSE // Are we already playing our deafened loop? Checked for safety so we don't deafen our players. (Not sure if we need this bc looping sounds datums have protection for starts being called repeatedly, commented out)
var/datum/looping_sound/mob/deafened/deaf_loop
/* TL;DR - the following is a lot of copypasta, but allows us to give simplemobs pain and death sounds.
* Different from carbons, where we check species, here we just check on the mob itself.
* TBD: Maybe port over from species to mob?
*/
var/can_pain_emote = TRUE
var/pain_emote_1p = null
var/pain_emote_3p = null
var/species_sounds = "None" // By default, we have nothing.
var/death_sound_override = null
/* // Not sure if needed, screams aren't a carbon thing rn.
var/scream_sound = null
var/female_scream_sound = null
var/male_scream_sound = null
var/scream_emote = null
*/
/mob/living/Initialize()
. = ..()
deaf_loop = new(list(src), FALSE)
/mob/living/Destroy()
. = ..()
QDEL_NULL(deaf_loop)
/mob/living/proc/vs_animate(var/belly_to_animate)
return
@@ -15,20 +44,3 @@ Maybe later, gotta figure out a way to click yourself when in a locker etc.
..()
verbs |= /mob/living/proc/click_self
*/
/mob/living
/* TL;DR - the following is a lot of copypasta, but allows us to give simplemobs pain and death sounds.
* Different from carbons, where we check species, here we just check on the mob itself.
* TBD: Maybe port over from species to mob?
*/
var/can_pain_emote = TRUE
var/pain_emote_1p = null
var/pain_emote_3p = null
var/species_sounds = "None" // By default, we have nothing.
var/death_sound_override = null
/* // Not sure if needed, screams aren't a carbon thing rn.
var/scream_sound = null
var/female_scream_sound = null
var/male_scream_sound = null
var/scream_emote = null
*/
@@ -0,0 +1,27 @@
/mob/living/simple_mob/animal/space/mouse_army/operative
icon_state = "mouse_operative"
item_state = "mouse_operative"
icon_living = "mouse_operative"
icon_dead = "mouse_operative_dead"
icon_rest = "mouse_operative_sleep"
/mob/living/simple_mob/animal/space/mouse_army/pyro
icon_state = "mouse_pyro"
item_state = "mouse_pyro"
icon_living = "mouse_pyro"
icon_dead = "mouse_pyro_dead"
icon_rest = "mouse_pyro_sleep"
/mob/living/simple_mob/animal/space/mouse_army/ammo
icon_state = "mouse_ammo"
item_state = "mouse_ammo"
icon_living = "mouse_ammo"
icon_dead = "mouse_ammo_dead"
icon_rest = "mouse_ammo_sleep"
/mob/living/simple_mob/animal/space/mouse_army/stealth
icon_state = "mouse_stealth"
item_state = "mouse_stealth"
icon_living = "mouse_stealth"
icon_dead = "mouse_stealth_dead"
icon_rest = "mouse_stealth_sleep"
@@ -0,0 +1,586 @@
///////////////////////////////
// Eclipse Mobs Go Here
///////////////////////////////
// Basic Version, the knife merc, or blood ininiate. Don't use them, or the eclipsesolar, lunar base versions either.
/mob/living/simple_mob/humanoid/eclipse
name = "Eclipse Initiate"
tt_desc = "E Homo sapiens"
desc = "A silver cladded, dangerous looking indivual."
icon = 'modular_chomp/icons/mob/animal_ch.dmi'
icon_state = "syndicate"
icon_living = "syndicate"
icon_dead = "statisgem"
icon_gib = "syndicate_gib"
faction = "eclipse"
movement_cooldown = 3
status_flags = 0
response_help = "pokes"
response_disarm = "shoves"
response_harm = "hits"
health = 100
maxHealth = 100
harm_intent_damage = 5
melee_damage_lower = 15 //Tac Knife damage
melee_damage_upper = 15
attack_sharp = 1 //CHOMPEdit
attack_edge = 1
attacktext = list("slashed", "stabbed")
projectile_dispersion = 8
projectile_accuracy = -20
armor = list(melee = 50, bullet = 50, laser = 50, energy = 50, bomb = 50, bio = 100, rad = 100) // Simple mob immunuties plus base Eclipse foe stuff
can_be_drop_prey = FALSE //CHOMP Add
pass_flags = PASSTABLE //mostly for the melee mobs.
softfall = TRUE //highly advanced spacesuit stuff
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
heat_damage_per_tick = 0
projectiletype = /obj/item/projectile/bullet/pistol/medium.
projectilesound = 'sound/weapons/Gunshot_light.ogg'
needs_reload = TRUE
reload_max = 7 // Not the best default, but it fits the pistol
ai_holder_type = /datum/ai_holder/simple_mob/merc/eclipse/ranged
// Grenade special attack vars
var/grenade_type = /obj/item/weapon/grenade/shooter/energy/laser
var/grenade_timer = 50 //CHOMPEdit
special_attack_cooldown = 45 SECONDS
special_attack_min_range = 2
special_attack_max_range = 7
////////////////////////////////
// Grenade Attack
////////////////////////////////
// Any merc can use this, just set special_attack_charges to a positive value
// Check if we should bother with the grenade
/mob/living/simple_mob/humanoid/eclipse/should_special_attack(atom/A)
var/mob_count = 0 // Are there enough mobs to consider grenading?
var/turf/T = get_turf(A)
for(var/mob/M in range(T, 2))
if(M.faction == faction) // Don't grenade our friends
return FALSE
if(M in oview(src, special_attack_max_range)) // And lets check if we can actually see at least two people before we throw a grenade
if(!M.stat) // Dead things don't warrant a grenade
mob_count ++
if(mob_count < 2)
return FALSE
else
return TRUE
// Yes? Throw the grenade
/mob/living/simple_mob/humanoid/eclipse/do_special_attack(atom/A)
set waitfor = FALSE
set_AI_busy(TRUE)
var/obj/item/weapon/grenade/G = new grenade_type(get_turf(src))
if(istype(G))
G.throw_at(A, G.throw_range, G.throw_speed, src)
G.det_time = grenade_timer //CHOMPEdit
G.activate(src) //CHOMPEdit
special_attack_charges = max(special_attack_charges-1, 0)
set_AI_busy(FALSE)
////////////////////////////////
// Stealing Merc AI Types
////////////////////////////////
/datum/ai_holder/simple_mob/merc/eclipse
threaten = FALSE
vision_range = 8
/datum/ai_holder/simple_mob/merc/eclipse/hunter
vision_range = 10
/datum/ai_holder/simple_mob/merc/eclipse/ranged
pointblank = TRUE // They get close? Just shoot 'em!
firing_lanes = TRUE // But not your buddies!
/datum/ai_holder/simple_mob/merc/eclipse/ranged/sniper
vision_range = 15 // We're a person with a long-ranged gun.
/datum/ai_holder/simple_mob/merc/eclipse/ranged/sniper/max_range(atom/movable/AM)
return holder.ICheckRangedAttack(AM) ? 16 : 1
////////////////////////////////
//The solar part of the faction, highly resistant to burns and stuff
/mob/living/simple_mob/humanoid/eclipse/solar
name = "Solar Eclipse Initiate"
desc = "A silver cladded, dangerous looking indivual."
armor = list(melee = 50, bullet = 50, laser = 95, energy = 95, bomb = 50, bio = 100, rad = 100) //Solar members are nigh immune to burns.
armor_soak = list(melee = 0, bullet = 0, laser = 5, energy = 5, bomb = 0, bio = 0, rad = 0)
/mob/living/simple_mob/humanoid/eclipse/solar/teslanoodle
name = "Solar Eclipse Tesla Serpent"
health = 125
maxHealth = 125
icon_state = "eclipse_tesla"
icon_living = "eclipse_tesla"
reload_max = 5
projectiletype = /obj/item/projectile/energy/electrode/eclipse
/mob/living/simple_mob/humanoid/eclipse/solar/firemoff
name = "Solar Eclipse Inferno Moth"
health = 90
maxHealth = 90
icon_state = "eclipse_moth"
icon_living = "eclipse_moth"
reload_max = 10
var/energy = 100
var/max_energy = 100
special_attack_cooldown = 5 SECONDS
special_attack_min_range = 0
special_attack_max_range = 4
projectiletype = /obj/item/projectile/energy/blob/moth
var/datum/effect/effect/system/smoke_spread/fire/smoke_special
/mob/living/simple_mob/humanoid/eclipse/solar/firemoff/handle_special()
..()
if(energy < max_energy)
energy++
/mob/living/simple_mob/humanoid/eclipse/solar/firemoff/Stat()
..()
if(client.statpanel == "Status")
statpanel("Status")
if(emergency_shuttle)
var/eta_status = emergency_shuttle.get_status_panel_eta()
if(eta_status)
stat(null, eta_status)
stat("Energy", energy)
/mob/living/simple_mob/humanoid/eclipse/solar/firemoff/should_special_attack(atom/A)
if(energy >= 20)
return TRUE
return FALSE
/mob/living/simple_mob/humanoid/eclipse/solar/firemoff/do_special_attack(atom/A)
. = TRUE
switch(a_intent)
if(I_DISARM)
if(energy < 20)
return FALSE
energy -= 20
if(smoke_special)
smoke_special.set_up(7,0,src)
smoke_special.start()
return TRUE
return FALSE
/mob/living/simple_mob/humanoid/eclipse/solar/snipertesh
name = "Solar Eclipse Sniper"
health = 75
maxHealth = 75
movement_cooldown = 1
icon_state = "eclipse_snipertesh"
icon_living = "eclipse_snipertesh"
projectiletype = /obj/item/projectile/beam/sniper/eclipse
projectile_accuracy = 75
reload_max = 5
reload_time = 2.0 SECONDS
ai_holder_type = /datum/ai_holder/simple_mob/merc/eclipse/ranged/sniper
ranged_attack_delay = 0.5 SECONDS
/mob/living/simple_mob/humanoid/eclipse/solar/snipertesh/ranged_pre_animation(atom/A)
Beam(get_turf(A), icon_state = "sniper_beam", time = 1 SECONDS, maxdistance = 15)
. = ..()
/mob/living/simple_mob/humanoid/eclipse/solar/snipertesh/shoot_target(atom/A)
set waitfor = FALSE
if(!istype(A) || QDELETED(A))
return
setClickCooldown(get_attack_speed())
face_atom(A)
var/atom/orig_targ = A
if(ranged_attack_delay)
A = get_turf(orig_targ)
ranged_pre_animation(A)
handle_attack_delay(A, ranged_attack_delay) // This will sleep this proc for a bit, which is why waitfor is false.
if(needs_reload)
if(reload_count >= reload_max)
try_reload()
return FALSE
visible_message("<span class='danger'><b>\The [src]</b> fires at \the [orig_targ]!</span>")
shoot(A)
if(casingtype)
new casingtype(loc)
if(ranged_attack_delay)
ranged_post_animation(A)
return TRUE
/mob/living/simple_mob/humanoid/eclipse/solar/radiation
name = "Solar Eclipse Irradiator"
health = 150
maxHealth = 150
glow_toggle = TRUE
reload_max = 3
icon_state = "eclipse_rad"
icon_living = "eclipse_rad"
projectiletype = /obj/item/projectile/energy/declone/burn
var/rads = 25
/mob/living/simple_mob/humanoid/eclipse/solar/radiation/handle_special()
if(stat != DEAD)
irradiate()
..()
/mob/living/simple_mob/humanoid/eclipse/solar/radiation/proc/irradiate()
SSradiation.radiate(src, rads)
//The lunar mobs, highly resistant to brute based damage.
/mob/living/simple_mob/humanoid/eclipse/lunar
name = "Lunar Eclipse Initiate"
desc = "A silver cladded, dangerous looking indivual."
armor = list(melee = 95, bullet = 95, laser = 50, energy = 50, bomb = 50, bio = 100, rad = 100) //Lunar members are nigh immune to burns.
armor_soak = list(melee = 15, bullet = 5, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) //15 because every melee weapon has dumb amount of AP
/mob/living/simple_mob/humanoid/eclipse/lunar/silvernoodle //Bouncing bullet extreme
name = "Lunar Eclipse Silver Serpent"
health = 125
maxHealth = 125
reload_max = 15
icon_state = "eclipse_silver"
icon_living = "eclipse_silver"
projectiletype = /obj/item/projectile/bullet/pistol/medium/ap/eclipse
/mob/living/simple_mob/humanoid/eclipse/lunar/silvernoodle/attackby(var/obj/item/O as obj, var/mob/user as mob)
if(O.force)
if(prob(15))
visible_message("<span class='danger'>\The [O] is absorbed by the armor!</span>")
if(user)
ai_holder.react_to_attack(user)
return
else
..()
else
to_chat(user, "<span class='warning'>This weapon is ineffective, it does no damage.</span>")
visible_message("<span class='warning'>\The [user] gently taps [src] with \the [O].</span>")
/mob/living/simple_mob/humanoid/eclipse/lunar/silvernoodle/bullet_act(var/obj/item/projectile/Proj)
if(!Proj) return
if(prob(15))
visible_message("<font color='red'><B>The [Proj] is absorbed by the armor!</B></font>")
if(Proj.firer)
ai_holder.react_to_attack(Proj.firer)
return
else
..()
/mob/living/simple_mob/humanoid/eclipse/lunar/shotgunner //wuff with shotgun
name = "Lunar Eclipse Shotgunner"
health = 90
maxHealth = 90
reload_max = 2
icon_state = "eclipse_shotwuff"
icon_living = "eclipse_shotwuff"
projectiletype = /obj/item/projectile/bullet/pellet/shotgun/eclipse
ranged_attack_delay = 0.5 SECONDS
/mob/living/simple_mob/humanoid/eclipse/lunar/bulletstorm //tesh got a gun
name = "Lunar Eclipse Judge"
health = 75
maxHealth = 75
icon_state = "eclipse_shottesh"
icon_living = "eclipse_shottesh"
projectiletype = /obj/item/projectile/bullet/shotgun
reload_max = 6
projectile_dispersion = 50
projectile_accuracy = -100
base_attack_cooldown = 0
/mob/living/simple_mob/humanoid/eclipse/lunar/ravanger //Tanky boi. Very deadly melee
name = "Lunar Eclipse Ravanger"
health = 150
maxHealth = 150
icon_state = "eclipse_ravanger"
icon_living = "eclipse_ravanger"
attack_armor_pen = 25
melee_damage_lower = 20
melee_damage_upper = 25
projectiletype = null
ai_holder_type = /datum/ai_holder/simple_mob/merc/eclipse
var/poison_chance = 50
var/poison_per_bite = 20
var/poison_type = "hyperzine"
/obj/item/projectile/energy/blob/moth
splatter = TRUE
damage = 20
armor_penetration = 25
my_chems = list("fuel")
modifier_type_to_apply = /datum/modifier/fire
modifier_duration = 6 SECONDS
color = "#38b9ff"
/obj/item/projectile/bullet/pistol/medium/ap/eclipse
armor_penetration = 25
ricochets = 1
ricochets_max = 5
ricochet_chance = 100
/obj/item/projectile/energy/electrode/eclipse
damage = 30
damage_type = BURN
color = "#38b9ff"
/obj/item/projectile/bullet/pellet/shotgun/eclipse
pellets = 8
range_step = 1
spread_step = 1
/obj/item/projectile/beam/sniper/eclipse
armor_penetration = 50
/obj/item/projectile/energy/declone/burn
damage = 20
armor_penetration = 25
nodamage = 0
//////////////////////////////////////////////
//Boss mob time. Or somewhat bosses anyway.
/////////////////////////////////////////////
/mob/living/simple_mob/humanoid/eclipse/solar/hellhound
name = "Solar Eclipse Hound"
health = 200
maxHealth = 200
ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax
projectiletype = /obj/item/projectile/energy/flash
movement_cooldown = 1
melee_damage_lower = 20
melee_damage_upper = 35
attack_armor_pen = 20
reload_max = 5
icon_state = "eclipse_hound"
icon_living = "eclipse_hound"
size_multiplier = 1.25
var/poison_chance = 100
var/poison_per_bite = 8
var/poison_type = "stoxin"
/mob/living/simple_mob/humanoid/eclipse/lunar/wheel
name = "Lunar Eclipse Wheel"
health = 200
maxHealth = 200
melee_damage_lower = 15
melee_damage_upper = 25
attack_armor_pen = 50
reload_max = 3
icon_state = "eclipse_wheel"
icon_living = "eclipse_wheel"
ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax
projectiletype = /obj/item/projectile/beam/energy_net
movement_cooldown = 2
var/cloaked_alpha = 50 // Lower = Harder to see.
var/cloak_cooldown = 5 SECONDS // Amount of time needed to re-cloak after losing it.
var/last_uncloak = 0 // world.time
/mob/living/simple_mob/humanoid/eclipse/lunar/wheel/cloak()
if(cloaked)
return
animate(src, alpha = cloaked_alpha, time = 1 SECOND)
cloaked = TRUE
/mob/living/simple_mob/humanoid/eclipse/lunar/wheel/uncloak()
last_uncloak = world.time // This is assigned even if it isn't cloaked already, to 'reset' the timer if the spider is continously getting attacked.
if(!cloaked)
return
animate(src, alpha = initial(alpha), time = 1 SECOND)
cloaked = FALSE
// Check if cloaking if possible.
/mob/living/simple_mob/humanoid/eclipse/lunar/wheel/proc/can_cloak()
if(stat)
return FALSE
if(last_uncloak + cloak_cooldown > world.time)
return FALSE
return TRUE
// Called by things that break cloaks, like Technomancer wards.
/mob/living/simple_mob/humanoid/eclipse/lunar/wheel/break_cloak()
uncloak()
/mob/living/simple_mob/humanoid/eclipse/lunar/wheel/is_cloaked()
return cloaked
// Cloaks the spider automatically, if possible.
/mob/living/simple_mob/humanoid/eclipse/lunar/wheel/handle_special()
if(!cloaked && can_cloak())
cloak()
/mob/living/simple_mob/humanoid/eclipse/lunar/wheel/bullet_act(obj/item/projectile/P)
. = ..()
break_cloak()
/mob/living/simple_mob/humanoid/eclipse/lunar/wheel/hit_with_weapon(obj/item/O, mob/living/user, effective_force, hit_zone)
. = ..()
break_cloak()
/mob/living/simple_mob/humanoid/eclipse/solar/hellhound/apply_melee_effects(var/atom/A)
if(isliving(A))
var/mob/living/L = A
if(L.reagents)
var/target_zone = pick(BP_TORSO,BP_TORSO,BP_TORSO,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_HEAD)
if(L.can_inject(src, null, target_zone))
inject_poison(L, target_zone)
// Does actual poison injection, after all checks passed.
/mob/living/simple_mob/humanoid/eclipse/solar/hellhound/proc/inject_poison(mob/living/L, target_zone)
if(prob(poison_chance))
to_chat(L, "<span class='warning'>You feel a tiny prick.</span>")
L.reagents.add_reagent(poison_type, poison_per_bite)
/mob/living/simple_mob/humanoid/eclipse/lunar/ravanger/apply_melee_effects(var/atom/A)
if(isliving(A))
var/mob/living/L = A
if(L.reagents)
var/target_zone = pick(BP_TORSO,BP_TORSO,BP_TORSO,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_HEAD)
if(L.can_inject(src, null, target_zone))
inject_poison(L, target_zone)
// Does actual poison injection, after all checks passed.
/mob/living/simple_mob/humanoid/eclipse/lunar/ravanger/proc/inject_poison(mob/living/L, target_zone)
if(prob(poison_chance))
to_chat(L, "<span class='warning'>You feel a tiny prick.</span>")
L.reagents.add_reagent(poison_type, poison_per_bite)
/////////////////
//Mecha Killers//
/////////////////
/mob/living/simple_mob/humanoid/eclipse/solar/guardian
name = "Solar Eclipse Guardian"
projectiletype = /obj/item/projectile/ion
icon_state = "eclipse_guardian"
icon_living = "eclipse_guardian"
reload_max = 10
/mob/living/simple_mob/humanoid/eclipse/solar/guardian/handle_special()
if(stat != DEAD)
heal_aura()
..()
/mob/living/simple_mob/humanoid/eclipse/solar/guardian/proc/heal_aura()
for(var/mob/living/L in view(src, 2))
if(L.stat == DEAD || !IIsAlly(L))
continue
L.add_modifier(/datum/modifier/aura/slime_heal, null, src)
/mob/living/simple_mob/humanoid/eclipse/lunar/pummler
name = "Lunar Eclipse Punnler"
projectiletype = /obj/item/projectile/bullet/shotgun/ion/eclipse
ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax
melee_damage_lower = 20
melee_damage_upper = 30
attack_armor_pen = 30
movement_cooldown = 1
icon_state = "eclipse_pummler"
icon_living = "eclipse_pummler"
reload_max = 25
size_multiplier = 1.5
var/poison_per_bite = 5
var/poison_type = "shredding_nanites"
var/poison_chance = 50
var/shock_chance = 30
/mob/living/simple_mob/humanoid/eclipse/lunar/pummler/apply_melee_effects(var/atom/A)
if(isliving(A))
var/mob/living/L = A
if(prob(shock_chance))
A.emp_act(4) //The weakest strength of EMP
playsound(src, 'sound/weapons/Egloves.ogg', 75, 1)
L.Weaken(4)
L.Stun(4)
L.stuttering = max(L.stuttering, 4)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, L)
s.start()
visible_message("<span class='danger'>The pummler releases a powerful shock!</span>")
else
if(L.reagents)
var/target_zone = pick(BP_TORSO,BP_TORSO,BP_TORSO,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_HEAD)
if(L.can_inject(src, null, target_zone))
inject_poison(L, target_zone)
/mob/living/simple_mob/humanoid/eclipse/lunar/pummler/proc/inject_poison(mob/living/L, target_zone)
if(prob(poison_chance))
to_chat(L, "<span class='warning'>You feel a small shock rushing through your veins.</span>")
L.reagents.add_reagent(poison_type, poison_per_bite)
/obj/item/projectile/bullet/shotgun/ion/eclipse
damage = 25
armor_penetration = 30
@@ -0,0 +1,36 @@
/mob/living/simple_mob/humanoid/eclipse
vore_active = 1
vore_capacity = 2
vore_max_size = RESIZE_HUGE
vore_min_size = RESIZE_SMALL
vore_pounce_chance = 0 // Beat them into crit before eating.
vore_icons = null
can_be_drop_prey = FALSE //CHOMP Add
/mob/living/simple_mob/humanoid/eclipse/Login()
. = ..()
if(!riding_datum)
riding_datum = new /datum/riding/simple_mob(src)
verbs |= /mob/living/simple_mob/proc/animal_mount
verbs |= /mob/living/proc/toggle_rider_reins
movement_cooldown = 3
/mob/living/simple_mob/humanoid/eclipse/MouseDrop_T(mob/living/M, mob/living/user)
return
/mob/living/simple_mob/humanoid/eclipse/init_vore()
if(!voremob_loaded)
return
.=..()
var/obj/belly/B = vore_selected
B.name = "stomach"
B.desc = "The fearsome preadtor gets a firm grip upon you, before dunking you into it's maw, then with a powerful swift gulp you're sent tumbling into it's stomach.."
B.emote_lists[DM_HOLD] = list(
"Your surroundings are momentarily filled with tour predator's pleased rumbling, its hands stroking over the taut swell you make in its belly.",)
B.emote_lists[DM_DIGEST] = list(
"Every clench of the predator's stomach grinds powerful digestive fluids into your body, forcibly churning away your strength!",)
//This is placeholder code. Going to add special vorny for each of them slowly but surely.
@@ -223,6 +223,7 @@
M.eye_blurry = max(M.eye_blurry, 30)
if(prob(20))
M.ear_deaf = max(M.ear_deaf, 4)
M.deaf_loop.start() // CHOMPStation Add: Ear Ringing/Deafness
M.Confuse(2)
else
M.Weaken(2)