mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2026-08-31 09:09:49 +01:00
Tooling updates and removal of corrupt maps [MDB IGNORE] (#7620)
This commit is contained in:
+18
-18
@@ -1,18 +1,18 @@
|
||||
/datum/trait/neutral/metabolism_up
|
||||
can_take = ORGANICS|SYNTHETICS
|
||||
|
||||
/datum/trait/neutral/metabolism_down
|
||||
can_take = ORGANICS|SYNTHETICS
|
||||
|
||||
/datum/trait/neutral/metabolism_apex
|
||||
can_take = ORGANICS|SYNTHETICS
|
||||
|
||||
/datum/trait/neutral/hide
|
||||
name = "Hide"
|
||||
desc = "You can hide beneath objects!"
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
|
||||
/datum/trait/neutral/hide/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
..()
|
||||
H.verbs |= /mob/living/proc/hide
|
||||
/datum/trait/neutral/metabolism_up
|
||||
can_take = ORGANICS|SYNTHETICS
|
||||
|
||||
/datum/trait/neutral/metabolism_down
|
||||
can_take = ORGANICS|SYNTHETICS
|
||||
|
||||
/datum/trait/neutral/metabolism_apex
|
||||
can_take = ORGANICS|SYNTHETICS
|
||||
|
||||
/datum/trait/neutral/hide
|
||||
name = "Hide"
|
||||
desc = "You can hide beneath objects!"
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
|
||||
/datum/trait/neutral/hide/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
..()
|
||||
H.verbs |= /mob/living/proc/hide
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
/obj/item/device/dogborg/sleeper/exploration
|
||||
name = "Store-Belly"
|
||||
desc = "Equipment for a ExploreHound unit. A mounted portable-storage device that holds supplies/person."
|
||||
icon_state = "sleeperlost"
|
||||
injection_chems = list("inaprovaline") // Only to stabilize during extractions
|
||||
compactor = TRUE
|
||||
max_item_count = 4
|
||||
medsensor = FALSE
|
||||
recycles = TRUE
|
||||
/obj/item/device/dogborg/sleeper/exploration
|
||||
name = "Store-Belly"
|
||||
desc = "Equipment for a ExploreHound unit. A mounted portable-storage device that holds supplies/person."
|
||||
icon_state = "sleeperlost"
|
||||
injection_chems = list("inaprovaline") // Only to stabilize during extractions
|
||||
compactor = TRUE
|
||||
max_item_count = 4
|
||||
medsensor = FALSE
|
||||
recycles = TRUE
|
||||
|
||||
@@ -1,39 +1,39 @@
|
||||
/mob/living/simple_mob/animal/crystalbeast
|
||||
faction = "livingcrystal"
|
||||
|
||||
//simple gimmick boss
|
||||
/mob/living/simple_mob/animal/crystalbeast/snail
|
||||
name = "Crystal Goliath Snail"
|
||||
desc = "A massive hulking beast made of strange crystal. Normal attacks seem like they will be ineffective. Explosions or piercing might do the trick"
|
||||
health = 150
|
||||
maxHealth = 150
|
||||
|
||||
icon = 'modular_chomp/icons/mob/eclipse.dmi'
|
||||
icon_state = "crystal"
|
||||
icon_dead = "crystal_dead"
|
||||
|
||||
armor = list(melee = 60, bullet = 60, laser = 60, energy = 60, bomb = 0, bio = 100, rad = 100)
|
||||
armor_soak = list(melee = 10, bullet = 10, laser = 10, energy = 10, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
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
|
||||
|
||||
melee_damage_lower = 5
|
||||
melee_damage_upper = 65
|
||||
size_multiplier = 4
|
||||
|
||||
melee_attack_delay = 8
|
||||
|
||||
movement_cooldown = 13
|
||||
loot_list = list(/obj/item/weapon/rig/ch/crystal = 100,
|
||||
)
|
||||
|
||||
/mob/living/simple_mob/animal/crystalbeast
|
||||
faction = "livingcrystal"
|
||||
|
||||
//simple gimmick boss
|
||||
/mob/living/simple_mob/animal/crystalbeast/snail
|
||||
name = "Crystal Goliath Snail"
|
||||
desc = "A massive hulking beast made of strange crystal. Normal attacks seem like they will be ineffective. Explosions or piercing might do the trick"
|
||||
health = 150
|
||||
maxHealth = 150
|
||||
|
||||
icon = 'modular_chomp/icons/mob/eclipse.dmi'
|
||||
icon_state = "crystal"
|
||||
icon_dead = "crystal_dead"
|
||||
|
||||
armor = list(melee = 60, bullet = 60, laser = 60, energy = 60, bomb = 0, bio = 100, rad = 100)
|
||||
armor_soak = list(melee = 10, bullet = 10, laser = 10, energy = 10, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
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
|
||||
|
||||
melee_damage_lower = 5
|
||||
melee_damage_upper = 65
|
||||
size_multiplier = 4
|
||||
|
||||
melee_attack_delay = 8
|
||||
|
||||
movement_cooldown = 13
|
||||
loot_list = list(/obj/item/weapon/rig/ch/crystal = 100,
|
||||
)
|
||||
|
||||
//Note to self, make the angel here when energy is gained
|
||||
@@ -1,23 +1,23 @@
|
||||
/mob/living/simple_mob/animal/space/carp/station
|
||||
name = "distant space carp"
|
||||
health = 50
|
||||
maxHealth = 50
|
||||
|
||||
faction = "station"
|
||||
|
||||
var/body_color
|
||||
|
||||
/mob/living/simple_mob/animal/space/carp/station/Initialize()
|
||||
.=..()
|
||||
|
||||
body_color = pick(list("green","red","orange","yellow","blue"))
|
||||
if(body_color == "green")
|
||||
color = "#660066"
|
||||
if(body_color == "red")
|
||||
color = "#FF0000"
|
||||
if(body_color == "orange")
|
||||
color = "#FF6600"
|
||||
if(body_color == "yellow")
|
||||
color = "#00FF00"
|
||||
if(body_color == "blue")
|
||||
/mob/living/simple_mob/animal/space/carp/station
|
||||
name = "distant space carp"
|
||||
health = 50
|
||||
maxHealth = 50
|
||||
|
||||
faction = "station"
|
||||
|
||||
var/body_color
|
||||
|
||||
/mob/living/simple_mob/animal/space/carp/station/Initialize()
|
||||
.=..()
|
||||
|
||||
body_color = pick(list("green","red","orange","yellow","blue"))
|
||||
if(body_color == "green")
|
||||
color = "#660066"
|
||||
if(body_color == "red")
|
||||
color = "#FF0000"
|
||||
if(body_color == "orange")
|
||||
color = "#FF6600"
|
||||
if(body_color == "yellow")
|
||||
color = "#00FF00"
|
||||
if(body_color == "blue")
|
||||
color = "#0099CC"
|
||||
+891
-891
File diff suppressed because it is too large
Load Diff
+368
-368
@@ -1,368 +1,368 @@
|
||||
/mob/living/simple_mob/humanoid/eclipse/head
|
||||
name = "Eclipse Head"
|
||||
desc = "You shouldn't be seeing this. This is going to be rough"
|
||||
health = 315
|
||||
maxHealth = 315 //A 20 damae shot will need to land 35 times
|
||||
projectile_dispersion = 8
|
||||
projectile_accuracy = 0
|
||||
ranged_cooldown = 5
|
||||
|
||||
damage_fatigue_mult = 0
|
||||
|
||||
armor = list(melee = 20, bullet = 20, laser = 20, energy = 20, bomb = 100, bio = 100, rad = 100)
|
||||
armor_soak = list(melee = 7, bullet = 7, laser = 7, energy = 7, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/security
|
||||
name = "Eclipse Head Of Security"
|
||||
icon_state = "fleetsec"
|
||||
projectiletype = /obj/item/projectile/energy/flamecrystal
|
||||
special_attack_cooldown = 10 SECONDS
|
||||
special_attack_min_range = 1
|
||||
special_attack_max_range = 8
|
||||
loot_list = list(/obj/item/weapon/gun/energy/flamegun = 100,
|
||||
/obj/item/weapon/bone/skull = 100
|
||||
)
|
||||
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/security/updatehealth()
|
||||
. = ..()
|
||||
|
||||
if(vore_fullness == 1)
|
||||
ranged_cooldown = 8
|
||||
projectiletype = /obj/item/projectile/energy/flamecrystal
|
||||
else if(vore_fullness == 2)
|
||||
ranged_cooldown = 12
|
||||
projectiletype = /obj/item/projectile/energy/fireball
|
||||
else if (vore_fullness > 2)
|
||||
ranged_cooldown = 16
|
||||
projectiletype = /obj/item/projectile/energy/fireball
|
||||
else
|
||||
ranged_cooldown = 5
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/security/do_special_attack(atom/A)
|
||||
if(vore_fullness < 2)
|
||||
if(prob(50))
|
||||
rapidfire(A)
|
||||
else
|
||||
tornado_maw(A)
|
||||
else if(vore_fullness == 2)
|
||||
tornado_maw(A)
|
||||
else if(vore_fullness > 2)
|
||||
if(prob(50))
|
||||
deathtoll(A)
|
||||
else
|
||||
tornado_maw(A)
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/security/proc/rapidfire(atom/A)
|
||||
var/obj/item/projectile/P = new /obj/item/projectile/energy/flamecrystal(get_turf(src))
|
||||
P.launch_projectile(A, BP_TORSO, src)
|
||||
sleep(1)
|
||||
P.launch_projectile(A, BP_TORSO, src)
|
||||
sleep(1)
|
||||
P.launch_projectile(A, BP_TORSO, src)
|
||||
sleep(1)
|
||||
P.launch_projectile(A, BP_TORSO, src)
|
||||
sleep(1)
|
||||
P.launch_projectile(A, BP_TORSO, src)
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/security/proc/tornado_maw(atom/A)
|
||||
var/turf/T = get_turf(src)
|
||||
|
||||
var/datum/effect/effect/system/grav_pull/s1 = new /datum/effect/effect/system/grav_pull
|
||||
s1.set_up(5, 1, T)
|
||||
s1.start()
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/security/proc/deathtoll(atom/A)
|
||||
var/list/potential_targets = ai_holder.list_targets()
|
||||
for(var/atom/entry in potential_targets)
|
||||
if(istype(entry, /mob/living/simple_mob/humanoid/eclipse))
|
||||
potential_targets -= entry
|
||||
if(potential_targets.len)
|
||||
var/iteration = clamp(potential_targets.len, 1, 3)
|
||||
for(var/i = 0, i < iteration, i++)
|
||||
if(!(potential_targets.len))
|
||||
break
|
||||
var/mob/target = pick(potential_targets)
|
||||
potential_targets -= target
|
||||
deathtollfollow(target)
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/security/proc/deathtollfollow(atom/target)
|
||||
var/list/bomb_range = block(locate(target.x-6, target.y-6, target.z), locate(target.x+6, target.y+6, target.z))
|
||||
var/obj/item/projectile/P = new /obj/item/projectile/bullet/flamegun(get_turf(src))
|
||||
bomb_range -= get_turf(target)
|
||||
for(var/i = 0, i < 4, i++)
|
||||
var/turf/T = pick(bomb_range)
|
||||
P.launch_projectile(target, BP_TORSO, src)
|
||||
bomb_range -= T
|
||||
|
||||
/obj/item/projectile/energy/flamecrystal
|
||||
name = "Flame Crystal"
|
||||
icon = 'modular_chomp/icons/mob/eclipse.dmi' //commiting sin
|
||||
icon_state = "firecrystal"
|
||||
damage = 15
|
||||
armor_penetration = 40 //Large pointy crystal
|
||||
damage_type = BRUTE
|
||||
check_armour = "bullet"
|
||||
modifier_type_to_apply = /datum/modifier/fire/weak
|
||||
modifier_duration = 0.05 MINUTE
|
||||
range = 12
|
||||
hud_state = "laser_sniper"
|
||||
|
||||
/obj/item/projectile/bullet/flamegun
|
||||
use_submunitions = 1
|
||||
only_submunitions = 1
|
||||
range = 0
|
||||
embed_chance = 0
|
||||
submunition_spread_max = 800
|
||||
submunition_spread_min = 200
|
||||
submunitions = list(/obj/item/projectile/energy/flamecrystal = 3)
|
||||
hud_state = "laser_heat"
|
||||
|
||||
/obj/item/projectile/bullet/flamegun/on_range()
|
||||
qdel(src)
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/scientist
|
||||
name = "Eclipse Lead Researcher"
|
||||
icon_state = "fleetsci"
|
||||
health = 30
|
||||
special_attack_cooldown = 5 SECONDS
|
||||
special_attack_min_range = 1
|
||||
special_attack_max_range = 10
|
||||
projectiletype = /obj/item/projectile/bullet/pistol/ap
|
||||
|
||||
loot_list = list(/obj/item/weapon/circuitboard/mecha/hades/targeting = 100,
|
||||
/obj/item/weapon/circuitboard/mecha/hades/peripherals = 100,
|
||||
/obj/item/weapon/circuitboard/mecha/hades/main = 100,
|
||||
/obj/item/weapon/bone/skull = 100
|
||||
)
|
||||
|
||||
var/obj/item/shield_projector/shield1 = null
|
||||
var/obj/item/shield_projector/shield2 = null
|
||||
var/obj/item/shield_projector/shield3 = null
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/scientist/Initialize(mapload)
|
||||
shield1 = new /obj/item/shield_projector/rectangle/automatic/eclipse(src)
|
||||
shield2 = new /obj/item/shield_projector/rectangle/automatic/eclipse/medium(src)
|
||||
shield3 = new /obj/item/shield_projector/rectangle/automatic/eclipse/big(src)
|
||||
return ..()
|
||||
|
||||
/obj/item/shield_projector/rectangle/automatic/eclipse
|
||||
name = "cult shield stone"
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "implant_melted"
|
||||
shield_health = 100
|
||||
max_shield_health = 100
|
||||
shield_regen_delay = 120 SECONDS
|
||||
shield_regen_amount = 100
|
||||
size_x = 1
|
||||
size_y = 1
|
||||
color = "#FF6600"
|
||||
high_color = "#0099CC"
|
||||
low_color = "#660066"
|
||||
|
||||
/obj/item/shield_projector/rectangle/automatic/eclipse/medium
|
||||
size_x = 2
|
||||
size_y = 2
|
||||
|
||||
/obj/item/shield_projector/rectangle/automatic/eclipse/big
|
||||
size_x = 3
|
||||
size_y = 3
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/scientist/updatehealth()
|
||||
. = ..()
|
||||
|
||||
if(vore_fullness == 1)
|
||||
special_attack_cooldown = 10 SECONDS
|
||||
else if(vore_fullness > 1)
|
||||
special_attack_cooldown = 20 SECONDS
|
||||
else
|
||||
special_attack_cooldown = 5 SECONDS
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/scientist/do_special_attack(atom/A)
|
||||
visible_message(span("warning", "\The [src] begins to fabricate drones!"))
|
||||
sleep(3)
|
||||
if(vore_fullness == 1)
|
||||
new /mob/living/simple_mob/mechanical/mining_drone/scavenger/eclipse (src.loc)
|
||||
else if(vore_fullness > 1)
|
||||
new /mob/living/simple_mob/mechanical/mining_drone/scavenger/eclipse (src.loc)
|
||||
new /mob/living/simple_mob/mechanical/mining_drone/scavenger/eclipse (src.loc)
|
||||
new /mob/living/simple_mob/mechanical/hivebot/swarm/eclipse (src.loc)
|
||||
new /mob/living/simple_mob/mechanical/hivebot/swarm/eclipse (src.loc)
|
||||
else
|
||||
new /mob/living/simple_mob/mechanical/hivebot/swarm/eclipse (src.loc)
|
||||
new /mob/living/simple_mob/mechanical/hivebot/swarm/eclipse (src.loc)
|
||||
|
||||
|
||||
/mob/living/simple_mob/mechanical/hivebot/swarm/eclipse
|
||||
faction = "eclipse"
|
||||
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/captain
|
||||
name = "Eclipse Expedition Leader"
|
||||
icon_state = "captain"
|
||||
|
||||
loot_list = list(/obj/item/slime_extract/dark = 20,
|
||||
/obj/item/prop/alien/junk = 60,
|
||||
/obj/random/tool/alien = 60,
|
||||
/obj/random/tool/alien = 60,
|
||||
/obj/item/weapon/cell/device/weapon/recharge/alien = 60,
|
||||
/obj/random/tool/alien = 60,
|
||||
/obj/item/weapon/cell/device/weapon/recharge/alien = 60,
|
||||
/obj/item/weapon/bluespace_harpoon = 60,
|
||||
/obj/item/weapon/flame/lighter/supermatter/syndismzippo = 60,
|
||||
/obj/item/weapon/gun/energy/medigun = 60,
|
||||
/obj/item/weapon/bone/skull = 100
|
||||
)
|
||||
|
||||
var/obj/item/shield_projector/shield1 = null
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/captain/Initialize(mapload)
|
||||
shield1 = new /obj/item/shield_projector/rectangle/automatic/eclipse/big(src)
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/captain/updatehealth() //This is a mistake
|
||||
. = ..()
|
||||
|
||||
if(vore_fullness == 1)
|
||||
ranged_cooldown = 4
|
||||
projectiletype = /obj/item/projectile/energy/frostsphere
|
||||
movement_cooldown = 1
|
||||
melee_attack_delay = 1.3
|
||||
melee_damage_lower = 20
|
||||
melee_damage_upper = 35
|
||||
armor = list(melee = 35, bullet = 35, laser = 35, energy = 35, bomb = 100, bio = 100, rad = 100)
|
||||
armor_soak = list(melee = 7, bullet = 7, laser = 7, energy = 7, bomb = 0, bio = 0, rad = 0)
|
||||
special_attack_cooldown = 15
|
||||
else if(vore_fullness == 2)
|
||||
ranged_cooldown = 0.5
|
||||
projectiletype = /obj/item/projectile/energy/muckblob
|
||||
movement_cooldown = 2
|
||||
melee_attack_delay = 1.8
|
||||
melee_damage_lower = 20
|
||||
melee_damage_upper = 40
|
||||
armor = list(melee = 50, bullet = 50, laser = 50, energy = 50, bomb = 100, bio = 100, rad = 100)
|
||||
armor_soak = list(melee = 6, bullet = 6, laser = 6, energy = 6, bomb = 0, bio = 0, rad = 0)
|
||||
special_attack_cooldown = 20
|
||||
else if (vore_fullness > 2)
|
||||
ranged_cooldown = 16
|
||||
projectiletype = /obj/item/projectile/energy/mob/ionbeam
|
||||
movement_cooldown = 3
|
||||
melee_attack_delay = 2
|
||||
melee_damage_lower = 30
|
||||
melee_damage_upper = 40
|
||||
armor = list(melee = 60, bullet = 60, laser = 60, energy = 60, bomb = 100, bio = 100, rad = 100)
|
||||
armor_soak = list(melee = 5, bullet = 5, laser = 5, energy = 5, bomb = 0, bio = 0, rad = 0)
|
||||
special_attack_cooldown = 30
|
||||
else
|
||||
ranged_cooldown = 8
|
||||
projectiletype = /obj/item/projectile/bullet/flamegun
|
||||
movement_cooldown = 0
|
||||
melee_attack_delay = 1.1
|
||||
melee_damage_lower = 20
|
||||
melee_damage_upper = 25
|
||||
armor = list(melee = 20, bullet = 20, laser = 20, energy = 20, bomb = 100, bio = 100, rad = 100)
|
||||
armor_soak = list(melee = 7, bullet = 7, laser = 7, energy = 7, bomb = 0, bio = 0, rad = 0)
|
||||
special_attack_cooldown = 10
|
||||
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/captain/do_special_attack(atom/A) //note to self, try to make fullness alts for this attacks
|
||||
if(prob(20))
|
||||
invokesec(A)
|
||||
else if(prob(20))
|
||||
invokesci(A)
|
||||
else if(prob(20))
|
||||
invokeengi(A)
|
||||
else if(prob(20))
|
||||
invokemedical(A)
|
||||
else
|
||||
invokecargo(A)
|
||||
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/captain/proc/invokesec(atom/A)
|
||||
var/list/potential_targets = ai_holder.list_targets()
|
||||
for(var/atom/entry in potential_targets)
|
||||
if(istype(entry, /mob/living/simple_mob/humanoid/eclipse))
|
||||
potential_targets -= entry
|
||||
if(potential_targets.len)
|
||||
var/iteration = clamp(potential_targets.len, 1, 3)
|
||||
for(var/i = 0, i < iteration, i++)
|
||||
if(!(potential_targets.len))
|
||||
break
|
||||
var/mob/target = pick(potential_targets)
|
||||
potential_targets -= target
|
||||
secattack(target)
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/captain/proc/secattack(atom/target)
|
||||
var/list/bomb_range = block(locate(target.x-4, target.y-4, target.z), locate(target.x+4, target.y+4, target.z))
|
||||
var/obj/item/projectile/P = new /obj/item/projectile/energy/flamecrystal(get_turf(src))
|
||||
bomb_range -= get_turf(target)
|
||||
for(var/i = 0, i < 4, i++)
|
||||
var/turf/T = pick(bomb_range)
|
||||
P.launch_projectile(target, BP_TORSO, src)
|
||||
bomb_range -= T
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/captain/proc/invokecargo(atom/A)
|
||||
visible_message(span("warning", "\The [src] calls for their help on radio!"))
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/captain/proc/invokeengi(atom/A) //place holdery
|
||||
var/obj/item/projectile/P = new /obj/item/projectile/temp(get_turf(src))
|
||||
P.launch_projectile(A, BP_TORSO, src)
|
||||
var/obj/item/projectile/P2 = new /obj/item/projectile/temp/hot(get_turf(src))
|
||||
P2.launch_projectile(A, BP_TORSO, src)
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/captain/proc/invokesci(atom/A)
|
||||
visible_message(span("warning", "\The [src] begins to fabricate drones!"))
|
||||
sleep(3)
|
||||
new /mob/living/simple_mob/mechanical/hivebot/swarm/eclipse (src.loc)
|
||||
new /mob/living/simple_mob/mechanical/hivebot/swarm/eclipse (src.loc)
|
||||
new /mob/living/simple_mob/mechanical/hivebot/swarm/eclipse (src.loc)
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/captain/proc/invokemedical(atom/A)
|
||||
visible_message(span("warning", "\The [src] begins to tend to their wounds!"))
|
||||
sleep(3)
|
||||
adjustBruteLoss(-12)
|
||||
adjustFireLoss(-12)
|
||||
adjustToxLoss(-12)
|
||||
adjustOxyLoss(-12)
|
||||
adjustCloneLoss(-12)
|
||||
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/shade
|
||||
name = "???"
|
||||
icon_state = "shade"
|
||||
health = 300
|
||||
maxHealth = 300 //18 20 damage shots
|
||||
|
||||
armor = list(melee = 20, bullet = 20, laser = 20, energy = 20, bomb = 100, bio = 100, rad = 100)
|
||||
|
||||
projectiletype = /obj/item/projectile/bullet/lightingburst
|
||||
|
||||
special_attack_cooldown = 10 SECONDS
|
||||
special_attack_min_range = 0
|
||||
special_attack_max_range = 7
|
||||
|
||||
loot_list = list(/obj/item/weapon/gun/energy/pulseglove = 100
|
||||
)
|
||||
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/shade/do_special_attack(atom/A)
|
||||
var/list/potential_targets = ai_holder.list_targets()
|
||||
for(var/atom/entry in potential_targets)
|
||||
if(istype(entry, /mob/living/simple_mob/humanoid/eclipse))
|
||||
potential_targets -= entry
|
||||
if(potential_targets.len)
|
||||
var/iteration = clamp(potential_targets.len, 1, 5)
|
||||
for(var/i = 0, i < iteration, i++)
|
||||
if(!(potential_targets.len))
|
||||
break
|
||||
var/mob/target = pick(potential_targets)
|
||||
potential_targets -= target
|
||||
bullethell(target)
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/shade/proc/bullethell(atom/target)
|
||||
var/list/bomb_range = block(locate(target.x-6, target.y-6, target.z), locate(target.x+6, target.y+6, target.z))
|
||||
var/obj/item/projectile/P = new /obj/item/projectile/bullet/meteorstorm(get_turf(src))
|
||||
bomb_range -= get_turf(target)
|
||||
for(var/i = 0, i < 4, i++)
|
||||
var/turf/T = pick(bomb_range)
|
||||
P.launch_projectile(target, BP_TORSO, src)
|
||||
bomb_range -= T
|
||||
/mob/living/simple_mob/humanoid/eclipse/head
|
||||
name = "Eclipse Head"
|
||||
desc = "You shouldn't be seeing this. This is going to be rough"
|
||||
health = 315
|
||||
maxHealth = 315 //A 20 damae shot will need to land 35 times
|
||||
projectile_dispersion = 8
|
||||
projectile_accuracy = 0
|
||||
ranged_cooldown = 5
|
||||
|
||||
damage_fatigue_mult = 0
|
||||
|
||||
armor = list(melee = 20, bullet = 20, laser = 20, energy = 20, bomb = 100, bio = 100, rad = 100)
|
||||
armor_soak = list(melee = 7, bullet = 7, laser = 7, energy = 7, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/security
|
||||
name = "Eclipse Head Of Security"
|
||||
icon_state = "fleetsec"
|
||||
projectiletype = /obj/item/projectile/energy/flamecrystal
|
||||
special_attack_cooldown = 10 SECONDS
|
||||
special_attack_min_range = 1
|
||||
special_attack_max_range = 8
|
||||
loot_list = list(/obj/item/weapon/gun/energy/flamegun = 100,
|
||||
/obj/item/weapon/bone/skull = 100
|
||||
)
|
||||
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/security/updatehealth()
|
||||
. = ..()
|
||||
|
||||
if(vore_fullness == 1)
|
||||
ranged_cooldown = 8
|
||||
projectiletype = /obj/item/projectile/energy/flamecrystal
|
||||
else if(vore_fullness == 2)
|
||||
ranged_cooldown = 12
|
||||
projectiletype = /obj/item/projectile/energy/fireball
|
||||
else if (vore_fullness > 2)
|
||||
ranged_cooldown = 16
|
||||
projectiletype = /obj/item/projectile/energy/fireball
|
||||
else
|
||||
ranged_cooldown = 5
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/security/do_special_attack(atom/A)
|
||||
if(vore_fullness < 2)
|
||||
if(prob(50))
|
||||
rapidfire(A)
|
||||
else
|
||||
tornado_maw(A)
|
||||
else if(vore_fullness == 2)
|
||||
tornado_maw(A)
|
||||
else if(vore_fullness > 2)
|
||||
if(prob(50))
|
||||
deathtoll(A)
|
||||
else
|
||||
tornado_maw(A)
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/security/proc/rapidfire(atom/A)
|
||||
var/obj/item/projectile/P = new /obj/item/projectile/energy/flamecrystal(get_turf(src))
|
||||
P.launch_projectile(A, BP_TORSO, src)
|
||||
sleep(1)
|
||||
P.launch_projectile(A, BP_TORSO, src)
|
||||
sleep(1)
|
||||
P.launch_projectile(A, BP_TORSO, src)
|
||||
sleep(1)
|
||||
P.launch_projectile(A, BP_TORSO, src)
|
||||
sleep(1)
|
||||
P.launch_projectile(A, BP_TORSO, src)
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/security/proc/tornado_maw(atom/A)
|
||||
var/turf/T = get_turf(src)
|
||||
|
||||
var/datum/effect/effect/system/grav_pull/s1 = new /datum/effect/effect/system/grav_pull
|
||||
s1.set_up(5, 1, T)
|
||||
s1.start()
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/security/proc/deathtoll(atom/A)
|
||||
var/list/potential_targets = ai_holder.list_targets()
|
||||
for(var/atom/entry in potential_targets)
|
||||
if(istype(entry, /mob/living/simple_mob/humanoid/eclipse))
|
||||
potential_targets -= entry
|
||||
if(potential_targets.len)
|
||||
var/iteration = clamp(potential_targets.len, 1, 3)
|
||||
for(var/i = 0, i < iteration, i++)
|
||||
if(!(potential_targets.len))
|
||||
break
|
||||
var/mob/target = pick(potential_targets)
|
||||
potential_targets -= target
|
||||
deathtollfollow(target)
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/security/proc/deathtollfollow(atom/target)
|
||||
var/list/bomb_range = block(locate(target.x-6, target.y-6, target.z), locate(target.x+6, target.y+6, target.z))
|
||||
var/obj/item/projectile/P = new /obj/item/projectile/bullet/flamegun(get_turf(src))
|
||||
bomb_range -= get_turf(target)
|
||||
for(var/i = 0, i < 4, i++)
|
||||
var/turf/T = pick(bomb_range)
|
||||
P.launch_projectile(target, BP_TORSO, src)
|
||||
bomb_range -= T
|
||||
|
||||
/obj/item/projectile/energy/flamecrystal
|
||||
name = "Flame Crystal"
|
||||
icon = 'modular_chomp/icons/mob/eclipse.dmi' //commiting sin
|
||||
icon_state = "firecrystal"
|
||||
damage = 15
|
||||
armor_penetration = 40 //Large pointy crystal
|
||||
damage_type = BRUTE
|
||||
check_armour = "bullet"
|
||||
modifier_type_to_apply = /datum/modifier/fire/weak
|
||||
modifier_duration = 0.05 MINUTE
|
||||
range = 12
|
||||
hud_state = "laser_sniper"
|
||||
|
||||
/obj/item/projectile/bullet/flamegun
|
||||
use_submunitions = 1
|
||||
only_submunitions = 1
|
||||
range = 0
|
||||
embed_chance = 0
|
||||
submunition_spread_max = 800
|
||||
submunition_spread_min = 200
|
||||
submunitions = list(/obj/item/projectile/energy/flamecrystal = 3)
|
||||
hud_state = "laser_heat"
|
||||
|
||||
/obj/item/projectile/bullet/flamegun/on_range()
|
||||
qdel(src)
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/scientist
|
||||
name = "Eclipse Lead Researcher"
|
||||
icon_state = "fleetsci"
|
||||
health = 30
|
||||
special_attack_cooldown = 5 SECONDS
|
||||
special_attack_min_range = 1
|
||||
special_attack_max_range = 10
|
||||
projectiletype = /obj/item/projectile/bullet/pistol/ap
|
||||
|
||||
loot_list = list(/obj/item/weapon/circuitboard/mecha/hades/targeting = 100,
|
||||
/obj/item/weapon/circuitboard/mecha/hades/peripherals = 100,
|
||||
/obj/item/weapon/circuitboard/mecha/hades/main = 100,
|
||||
/obj/item/weapon/bone/skull = 100
|
||||
)
|
||||
|
||||
var/obj/item/shield_projector/shield1 = null
|
||||
var/obj/item/shield_projector/shield2 = null
|
||||
var/obj/item/shield_projector/shield3 = null
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/scientist/Initialize(mapload)
|
||||
shield1 = new /obj/item/shield_projector/rectangle/automatic/eclipse(src)
|
||||
shield2 = new /obj/item/shield_projector/rectangle/automatic/eclipse/medium(src)
|
||||
shield3 = new /obj/item/shield_projector/rectangle/automatic/eclipse/big(src)
|
||||
return ..()
|
||||
|
||||
/obj/item/shield_projector/rectangle/automatic/eclipse
|
||||
name = "cult shield stone"
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "implant_melted"
|
||||
shield_health = 100
|
||||
max_shield_health = 100
|
||||
shield_regen_delay = 120 SECONDS
|
||||
shield_regen_amount = 100
|
||||
size_x = 1
|
||||
size_y = 1
|
||||
color = "#FF6600"
|
||||
high_color = "#0099CC"
|
||||
low_color = "#660066"
|
||||
|
||||
/obj/item/shield_projector/rectangle/automatic/eclipse/medium
|
||||
size_x = 2
|
||||
size_y = 2
|
||||
|
||||
/obj/item/shield_projector/rectangle/automatic/eclipse/big
|
||||
size_x = 3
|
||||
size_y = 3
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/scientist/updatehealth()
|
||||
. = ..()
|
||||
|
||||
if(vore_fullness == 1)
|
||||
special_attack_cooldown = 10 SECONDS
|
||||
else if(vore_fullness > 1)
|
||||
special_attack_cooldown = 20 SECONDS
|
||||
else
|
||||
special_attack_cooldown = 5 SECONDS
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/scientist/do_special_attack(atom/A)
|
||||
visible_message(span("warning", "\The [src] begins to fabricate drones!"))
|
||||
sleep(3)
|
||||
if(vore_fullness == 1)
|
||||
new /mob/living/simple_mob/mechanical/mining_drone/scavenger/eclipse (src.loc)
|
||||
else if(vore_fullness > 1)
|
||||
new /mob/living/simple_mob/mechanical/mining_drone/scavenger/eclipse (src.loc)
|
||||
new /mob/living/simple_mob/mechanical/mining_drone/scavenger/eclipse (src.loc)
|
||||
new /mob/living/simple_mob/mechanical/hivebot/swarm/eclipse (src.loc)
|
||||
new /mob/living/simple_mob/mechanical/hivebot/swarm/eclipse (src.loc)
|
||||
else
|
||||
new /mob/living/simple_mob/mechanical/hivebot/swarm/eclipse (src.loc)
|
||||
new /mob/living/simple_mob/mechanical/hivebot/swarm/eclipse (src.loc)
|
||||
|
||||
|
||||
/mob/living/simple_mob/mechanical/hivebot/swarm/eclipse
|
||||
faction = "eclipse"
|
||||
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/captain
|
||||
name = "Eclipse Expedition Leader"
|
||||
icon_state = "captain"
|
||||
|
||||
loot_list = list(/obj/item/slime_extract/dark = 20,
|
||||
/obj/item/prop/alien/junk = 60,
|
||||
/obj/random/tool/alien = 60,
|
||||
/obj/random/tool/alien = 60,
|
||||
/obj/item/weapon/cell/device/weapon/recharge/alien = 60,
|
||||
/obj/random/tool/alien = 60,
|
||||
/obj/item/weapon/cell/device/weapon/recharge/alien = 60,
|
||||
/obj/item/weapon/bluespace_harpoon = 60,
|
||||
/obj/item/weapon/flame/lighter/supermatter/syndismzippo = 60,
|
||||
/obj/item/weapon/gun/energy/medigun = 60,
|
||||
/obj/item/weapon/bone/skull = 100
|
||||
)
|
||||
|
||||
var/obj/item/shield_projector/shield1 = null
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/captain/Initialize(mapload)
|
||||
shield1 = new /obj/item/shield_projector/rectangle/automatic/eclipse/big(src)
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/captain/updatehealth() //This is a mistake
|
||||
. = ..()
|
||||
|
||||
if(vore_fullness == 1)
|
||||
ranged_cooldown = 4
|
||||
projectiletype = /obj/item/projectile/energy/frostsphere
|
||||
movement_cooldown = 1
|
||||
melee_attack_delay = 1.3
|
||||
melee_damage_lower = 20
|
||||
melee_damage_upper = 35
|
||||
armor = list(melee = 35, bullet = 35, laser = 35, energy = 35, bomb = 100, bio = 100, rad = 100)
|
||||
armor_soak = list(melee = 7, bullet = 7, laser = 7, energy = 7, bomb = 0, bio = 0, rad = 0)
|
||||
special_attack_cooldown = 15
|
||||
else if(vore_fullness == 2)
|
||||
ranged_cooldown = 0.5
|
||||
projectiletype = /obj/item/projectile/energy/muckblob
|
||||
movement_cooldown = 2
|
||||
melee_attack_delay = 1.8
|
||||
melee_damage_lower = 20
|
||||
melee_damage_upper = 40
|
||||
armor = list(melee = 50, bullet = 50, laser = 50, energy = 50, bomb = 100, bio = 100, rad = 100)
|
||||
armor_soak = list(melee = 6, bullet = 6, laser = 6, energy = 6, bomb = 0, bio = 0, rad = 0)
|
||||
special_attack_cooldown = 20
|
||||
else if (vore_fullness > 2)
|
||||
ranged_cooldown = 16
|
||||
projectiletype = /obj/item/projectile/energy/mob/ionbeam
|
||||
movement_cooldown = 3
|
||||
melee_attack_delay = 2
|
||||
melee_damage_lower = 30
|
||||
melee_damage_upper = 40
|
||||
armor = list(melee = 60, bullet = 60, laser = 60, energy = 60, bomb = 100, bio = 100, rad = 100)
|
||||
armor_soak = list(melee = 5, bullet = 5, laser = 5, energy = 5, bomb = 0, bio = 0, rad = 0)
|
||||
special_attack_cooldown = 30
|
||||
else
|
||||
ranged_cooldown = 8
|
||||
projectiletype = /obj/item/projectile/bullet/flamegun
|
||||
movement_cooldown = 0
|
||||
melee_attack_delay = 1.1
|
||||
melee_damage_lower = 20
|
||||
melee_damage_upper = 25
|
||||
armor = list(melee = 20, bullet = 20, laser = 20, energy = 20, bomb = 100, bio = 100, rad = 100)
|
||||
armor_soak = list(melee = 7, bullet = 7, laser = 7, energy = 7, bomb = 0, bio = 0, rad = 0)
|
||||
special_attack_cooldown = 10
|
||||
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/captain/do_special_attack(atom/A) //note to self, try to make fullness alts for this attacks
|
||||
if(prob(20))
|
||||
invokesec(A)
|
||||
else if(prob(20))
|
||||
invokesci(A)
|
||||
else if(prob(20))
|
||||
invokeengi(A)
|
||||
else if(prob(20))
|
||||
invokemedical(A)
|
||||
else
|
||||
invokecargo(A)
|
||||
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/captain/proc/invokesec(atom/A)
|
||||
var/list/potential_targets = ai_holder.list_targets()
|
||||
for(var/atom/entry in potential_targets)
|
||||
if(istype(entry, /mob/living/simple_mob/humanoid/eclipse))
|
||||
potential_targets -= entry
|
||||
if(potential_targets.len)
|
||||
var/iteration = clamp(potential_targets.len, 1, 3)
|
||||
for(var/i = 0, i < iteration, i++)
|
||||
if(!(potential_targets.len))
|
||||
break
|
||||
var/mob/target = pick(potential_targets)
|
||||
potential_targets -= target
|
||||
secattack(target)
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/captain/proc/secattack(atom/target)
|
||||
var/list/bomb_range = block(locate(target.x-4, target.y-4, target.z), locate(target.x+4, target.y+4, target.z))
|
||||
var/obj/item/projectile/P = new /obj/item/projectile/energy/flamecrystal(get_turf(src))
|
||||
bomb_range -= get_turf(target)
|
||||
for(var/i = 0, i < 4, i++)
|
||||
var/turf/T = pick(bomb_range)
|
||||
P.launch_projectile(target, BP_TORSO, src)
|
||||
bomb_range -= T
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/captain/proc/invokecargo(atom/A)
|
||||
visible_message(span("warning", "\The [src] calls for their help on radio!"))
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/captain/proc/invokeengi(atom/A) //place holdery
|
||||
var/obj/item/projectile/P = new /obj/item/projectile/temp(get_turf(src))
|
||||
P.launch_projectile(A, BP_TORSO, src)
|
||||
var/obj/item/projectile/P2 = new /obj/item/projectile/temp/hot(get_turf(src))
|
||||
P2.launch_projectile(A, BP_TORSO, src)
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/captain/proc/invokesci(atom/A)
|
||||
visible_message(span("warning", "\The [src] begins to fabricate drones!"))
|
||||
sleep(3)
|
||||
new /mob/living/simple_mob/mechanical/hivebot/swarm/eclipse (src.loc)
|
||||
new /mob/living/simple_mob/mechanical/hivebot/swarm/eclipse (src.loc)
|
||||
new /mob/living/simple_mob/mechanical/hivebot/swarm/eclipse (src.loc)
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/captain/proc/invokemedical(atom/A)
|
||||
visible_message(span("warning", "\The [src] begins to tend to their wounds!"))
|
||||
sleep(3)
|
||||
adjustBruteLoss(-12)
|
||||
adjustFireLoss(-12)
|
||||
adjustToxLoss(-12)
|
||||
adjustOxyLoss(-12)
|
||||
adjustCloneLoss(-12)
|
||||
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/shade
|
||||
name = "???"
|
||||
icon_state = "shade"
|
||||
health = 300
|
||||
maxHealth = 300 //18 20 damage shots
|
||||
|
||||
armor = list(melee = 20, bullet = 20, laser = 20, energy = 20, bomb = 100, bio = 100, rad = 100)
|
||||
|
||||
projectiletype = /obj/item/projectile/bullet/lightingburst
|
||||
|
||||
special_attack_cooldown = 10 SECONDS
|
||||
special_attack_min_range = 0
|
||||
special_attack_max_range = 7
|
||||
|
||||
loot_list = list(/obj/item/weapon/gun/energy/pulseglove = 100
|
||||
)
|
||||
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/shade/do_special_attack(atom/A)
|
||||
var/list/potential_targets = ai_holder.list_targets()
|
||||
for(var/atom/entry in potential_targets)
|
||||
if(istype(entry, /mob/living/simple_mob/humanoid/eclipse))
|
||||
potential_targets -= entry
|
||||
if(potential_targets.len)
|
||||
var/iteration = clamp(potential_targets.len, 1, 5)
|
||||
for(var/i = 0, i < iteration, i++)
|
||||
if(!(potential_targets.len))
|
||||
break
|
||||
var/mob/target = pick(potential_targets)
|
||||
potential_targets -= target
|
||||
bullethell(target)
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/shade/proc/bullethell(atom/target)
|
||||
var/list/bomb_range = block(locate(target.x-6, target.y-6, target.z), locate(target.x+6, target.y+6, target.z))
|
||||
var/obj/item/projectile/P = new /obj/item/projectile/bullet/meteorstorm(get_turf(src))
|
||||
bomb_range -= get_turf(target)
|
||||
for(var/i = 0, i < 4, i++)
|
||||
var/turf/T = pick(bomb_range)
|
||||
P.launch_projectile(target, BP_TORSO, src)
|
||||
bomb_range -= T
|
||||
|
||||
+155
-155
@@ -1,156 +1,156 @@
|
||||
/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.
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/scientist
|
||||
vore_active = 1
|
||||
vore_capacity = 6
|
||||
vore_max_size = RESIZE_HUGE
|
||||
vore_min_size = RESIZE_SMALL
|
||||
vore_pounce_chance = 0 // Beat them into crit before eating.
|
||||
|
||||
can_be_drop_prey = FALSE //CHOMP Add
|
||||
digestable = 0
|
||||
devourable = 0
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/scientist/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 = 1
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/scientist/MouseDrop_T(mob/living/M, mob/living/user)
|
||||
return
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/scientist/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.",
|
||||
"Your surrondings glow with a neon red, dashes and spirals of pitch black flowing through the red gummy flesh as if it were a strange sky.",
|
||||
"Your satsified predator sways their bloated gullet happily, their warm rumbling vibrarting the stomach, and by extension you.",)
|
||||
|
||||
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!",
|
||||
"The caustic red acid splashes, and washes over your frame, your sense of smell being overwhelmed by acid and sulfur as you're turned to nutrion.",
|
||||
"Every swift swap of the predator's hips sends you slamming against the glowing red sides, your vision blurring further as you contunie to weaken." ,)
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/security
|
||||
vore_active = 1
|
||||
vore_capacity = 6
|
||||
vore_max_size = RESIZE_HUGE
|
||||
vore_min_size = RESIZE_SMALL
|
||||
vore_pounce_chance = 0 // Beat them into crit before eating.
|
||||
|
||||
can_be_drop_prey = FALSE //CHOMP Add
|
||||
digestable = 0
|
||||
devourable = 0
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/security/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 = 1
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/security/MouseDrop_T(mob/living/M, mob/living/user)
|
||||
return
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/security/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.",
|
||||
"Your surrondings glow with a neon red, dashes and spirals of pitch black flowing through the red gummy flesh as if it were a strange sky.",
|
||||
"Your satsified predator sways their bloated gullet happily, their warm rumbling vibrarting the stomach, and by extension you.",)
|
||||
|
||||
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!",
|
||||
"The caustic red acid splashes, and washes over your frame, your sense of smell being overwhelmed by acid and sulfur as you're turned to nutrion.",
|
||||
"Every swift swap of the predator's hips sends you slamming against the glowing red sides, your vision blurring further as you contunie to weaken." ,)
|
||||
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/captain
|
||||
vore_active = 1
|
||||
vore_capacity = 6
|
||||
vore_max_size = RESIZE_HUGE
|
||||
vore_min_size = RESIZE_SMALL
|
||||
vore_pounce_chance = 0 // Beat them into crit before eating.
|
||||
|
||||
can_be_drop_prey = FALSE //CHOMP Add
|
||||
digestable = 0
|
||||
devourable = 0
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/captain/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 = 1
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/captain/MouseDrop_T(mob/living/M, mob/living/user)
|
||||
return
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/captain/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.",
|
||||
"Your surrondings glow with a neon red, dashes and spirals of pitch black flowing through the red gummy flesh as if it were a strange sky.",
|
||||
"Your satsified predator sways their bloated gullet happily, their warm rumbling vibrarting the stomach, and by extension you.",)
|
||||
|
||||
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!",
|
||||
"The caustic red acid splashes, and washes over your frame, your sense of smell being overwhelmed by acid and sulfur as you're turned to nutrion.",
|
||||
/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.
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/scientist
|
||||
vore_active = 1
|
||||
vore_capacity = 6
|
||||
vore_max_size = RESIZE_HUGE
|
||||
vore_min_size = RESIZE_SMALL
|
||||
vore_pounce_chance = 0 // Beat them into crit before eating.
|
||||
|
||||
can_be_drop_prey = FALSE //CHOMP Add
|
||||
digestable = 0
|
||||
devourable = 0
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/scientist/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 = 1
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/scientist/MouseDrop_T(mob/living/M, mob/living/user)
|
||||
return
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/scientist/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.",
|
||||
"Your surrondings glow with a neon red, dashes and spirals of pitch black flowing through the red gummy flesh as if it were a strange sky.",
|
||||
"Your satsified predator sways their bloated gullet happily, their warm rumbling vibrarting the stomach, and by extension you.",)
|
||||
|
||||
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!",
|
||||
"The caustic red acid splashes, and washes over your frame, your sense of smell being overwhelmed by acid and sulfur as you're turned to nutrion.",
|
||||
"Every swift swap of the predator's hips sends you slamming against the glowing red sides, your vision blurring further as you contunie to weaken." ,)
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/security
|
||||
vore_active = 1
|
||||
vore_capacity = 6
|
||||
vore_max_size = RESIZE_HUGE
|
||||
vore_min_size = RESIZE_SMALL
|
||||
vore_pounce_chance = 0 // Beat them into crit before eating.
|
||||
|
||||
can_be_drop_prey = FALSE //CHOMP Add
|
||||
digestable = 0
|
||||
devourable = 0
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/security/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 = 1
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/security/MouseDrop_T(mob/living/M, mob/living/user)
|
||||
return
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/security/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.",
|
||||
"Your surrondings glow with a neon red, dashes and spirals of pitch black flowing through the red gummy flesh as if it were a strange sky.",
|
||||
"Your satsified predator sways their bloated gullet happily, their warm rumbling vibrarting the stomach, and by extension you.",)
|
||||
|
||||
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!",
|
||||
"The caustic red acid splashes, and washes over your frame, your sense of smell being overwhelmed by acid and sulfur as you're turned to nutrion.",
|
||||
"Every swift swap of the predator's hips sends you slamming against the glowing red sides, your vision blurring further as you contunie to weaken." ,)
|
||||
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/captain
|
||||
vore_active = 1
|
||||
vore_capacity = 6
|
||||
vore_max_size = RESIZE_HUGE
|
||||
vore_min_size = RESIZE_SMALL
|
||||
vore_pounce_chance = 0 // Beat them into crit before eating.
|
||||
|
||||
can_be_drop_prey = FALSE //CHOMP Add
|
||||
digestable = 0
|
||||
devourable = 0
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/captain/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 = 1
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/captain/MouseDrop_T(mob/living/M, mob/living/user)
|
||||
return
|
||||
|
||||
/mob/living/simple_mob/humanoid/eclipse/head/captain/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.",
|
||||
"Your surrondings glow with a neon red, dashes and spirals of pitch black flowing through the red gummy flesh as if it were a strange sky.",
|
||||
"Your satsified predator sways their bloated gullet happily, their warm rumbling vibrarting the stomach, and by extension you.",)
|
||||
|
||||
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!",
|
||||
"The caustic red acid splashes, and washes over your frame, your sense of smell being overwhelmed by acid and sulfur as you're turned to nutrion.",
|
||||
"Every swift swap of the predator's hips sends you slamming against the glowing red sides, your vision blurring further as you contunie to weaken." ,)
|
||||
+242
-242
@@ -1,242 +1,242 @@
|
||||
//beg critters
|
||||
//kitsune is bullet hell esque in a traditonal sense
|
||||
//naga does a bunch of spawning and CoC
|
||||
//This are both training for the bigger dude I'll make later
|
||||
/mob/living/simple_mob/humanoid/starhunter/hunter/druid
|
||||
name = "Starhunter Druid"
|
||||
health = 200 //20 hits from 20 damage
|
||||
maxHealth = 200 //20 hits from 20 damage
|
||||
damage_fatigue_mult = 0
|
||||
icon_state = "snekdruid"
|
||||
icon_living = "snekdruid"
|
||||
|
||||
/mob/living/simple_mob/humanoid/starhunter/hunter/druid/do_special_attack(atom/A)
|
||||
if(prob(50))
|
||||
lightpillar(A)
|
||||
else
|
||||
fire_lines(A)
|
||||
|
||||
/mob/living/simple_mob/humanoid/starhunter/hunter/bullet_act(obj/item/projectile/P)
|
||||
if(istype(P, /obj/item/projectile/energy/lightpillar))
|
||||
visible_message(span_orange("<B>[P] seems ineffective!.</B>")) //immune to their own attack
|
||||
else
|
||||
..()
|
||||
|
||||
/mob/living/simple_mob/humanoid/starhunter/hunter/proc/lightpillar(atom/A)
|
||||
var/list/potential_targets = ai_holder.list_targets()
|
||||
for(var/atom/entry in potential_targets)
|
||||
if(istype(entry, /mob/living/simple_mob/humanoid/starhunter/hunter))
|
||||
potential_targets -= entry
|
||||
if(potential_targets.len)
|
||||
var/iteration = clamp(potential_targets.len, 1, 3)
|
||||
for(var/i = 0, i < iteration, i++)
|
||||
if(!(potential_targets.len))
|
||||
break
|
||||
var/mob/target = pick(potential_targets)
|
||||
potential_targets -= target
|
||||
spawn_lightpillar(target)
|
||||
|
||||
/mob/living/simple_mob/humanoid/starhunter/hunter/proc/spawn_lightpillar(atom/target)
|
||||
var/list/bomb_range = block(locate(target.x-4, target.y-4, target.z), locate(target.x+4, target.y+4, target.z))
|
||||
new /obj/effect/calldown_attack(get_turf(target))
|
||||
bomb_range -= get_turf(target)
|
||||
for(var/i = 0, i < 4, i++)
|
||||
var/turf/T = pick(bomb_range)
|
||||
new /mob/living/simple_mob/humanoid/starhunter/hunter/prop(T)
|
||||
bomb_range -= T
|
||||
|
||||
/mob/living/simple_mob/humanoid/starhunter/hunter/prop //This ain't a mob to spawn, but something apart of other mobs attacks and self deletes
|
||||
health = 1000
|
||||
maxHealth = 1000
|
||||
projectile_dispersion = 0
|
||||
projectile_accuracy = 100
|
||||
armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 100, bio = 100, rad = 100)
|
||||
projectiletype = /obj/item/projectile/energy/lightpillar
|
||||
ranged_attack_delay = 1.5 SECONDS
|
||||
icon_state = "prism"
|
||||
icon_living = "prism"
|
||||
|
||||
/mob/living/simple_mob/humanoid/starhunter/hunter/prop/ranged_pre_animation(atom/A)
|
||||
Beam(get_turf(A), icon_state = "sniper_beam", time = 2 SECONDS, maxdistance = 10)
|
||||
. = ..()
|
||||
|
||||
/mob/living/simple_mob/humanoid/starhunter/hunter/prop/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
|
||||
|
||||
/*
|
||||
* CHOMP Addition: This section here is (duplicated) special snowflake code because sniper does not call parent. Basically, this is a non-stupid version of the above intended for ranged mobs.
|
||||
* ranged_attack_delay is stupid because it sleeps the entire mob.
|
||||
* This new ranged_cooldown_time is smarter in the sense that it is an internalized timer. Try not to confuse the names.
|
||||
*/
|
||||
if(ranged_cooldown_time) //If you have a non-zero number in a mob's variables, this pattern begins.
|
||||
if(ranged_cooldown <= world.time) //Further down, a timer keeps adding to the ranged_cooldown variable automatically.
|
||||
visible_message("<span class='danger'><b>\The [src]</b> fires at \the [A]!</span>") //Leave notice of shooting.
|
||||
shoot(A) //Perform the shoot action
|
||||
if(casingtype) //If the mob is designated to leave casings...
|
||||
new casingtype(loc) //... leave the casing.
|
||||
ranged_cooldown = world.time + ranged_cooldown_time + ((injury_level / 2) SECONDS) //Special addition here. This is a timer. Keeping updating the time after shooting. Add that ranged cooldown time specified in the mob to the world time.
|
||||
qdel(src)
|
||||
return TRUE //End these commands here.
|
||||
// CHOMPAddition End
|
||||
|
||||
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/starhunter/hunter/proc/fire_lines(atom/A)
|
||||
var/list/potential_targets = ai_holder.list_targets()
|
||||
for(var/atom/entry in potential_targets)
|
||||
if(istype(entry, /mob/living/simple_mob/humanoid/starhunter/hunter))
|
||||
potential_targets -= entry
|
||||
if(potential_targets.len)
|
||||
var/iteration = clamp(potential_targets.len, 1, 3)
|
||||
for(var/i = 0, i < iteration, i++)
|
||||
if(!(potential_targets.len))
|
||||
break
|
||||
var/mob/target = pick(potential_targets)
|
||||
potential_targets -= target
|
||||
spawn_fire(target)
|
||||
|
||||
/mob/living/simple_mob/humanoid/starhunter/hunter/proc/spawn_fire(atom/target)
|
||||
var/alignment = rand(1,2) // 1 for vertical, 2 for horizontal
|
||||
var/list/line_range = list()
|
||||
var/turf/T = get_turf(target)
|
||||
line_range += T
|
||||
for(var/i = 1, i <= 7, i++)
|
||||
switch(alignment)
|
||||
if(1)
|
||||
if(T.x-i > 0)
|
||||
line_range += locate(T.x-i, T.y, T.z)
|
||||
if(T.x+i <= world.maxx)
|
||||
line_range += locate(T.x+i, T.y, T.z)
|
||||
if(2)
|
||||
if(T.y-i > 0)
|
||||
line_range += locate(T.x, T.y-i, T.z)
|
||||
if(T.y+i <= world.maxy)
|
||||
line_range += locate(T.x, T.y+i, T.z)
|
||||
for(var/turf/dropspot in line_range)
|
||||
new /obj/effect/calldown_attack_fire(dropspot)
|
||||
|
||||
|
||||
/obj/effect/calldown_attack_fire
|
||||
anchored = TRUE
|
||||
density = FALSE
|
||||
unacidable = TRUE
|
||||
mouse_opacity = 0
|
||||
icon = 'icons/effects/effects.dmi'
|
||||
icon_state = "drop_marker"
|
||||
|
||||
/obj/effect/calldown_attack_fire/Initialize(mapload)
|
||||
..()
|
||||
return INITIALIZE_HINT_LATELOAD
|
||||
|
||||
/obj/effect/calldown_attack_fire/LateInitialize()
|
||||
var/delay = rand(25, 30)
|
||||
spawn(delay-7)
|
||||
new /obj/fire(src.loc)
|
||||
spawn(delay)
|
||||
qdel(src)
|
||||
|
||||
|
||||
//Kitsune Stuff
|
||||
/mob/living/simple_mob/humanoid/starhunter/hunter/champion
|
||||
name = "Starhunter Starweilder"
|
||||
health = 200 //10 hits from 20 damage
|
||||
maxHealth = 200
|
||||
damage_fatigue_mult = 0
|
||||
projectiletype = /obj/item/projectile/energy/ninjastar
|
||||
icon_state = "suneswift"
|
||||
icon_living = "suneswift"
|
||||
|
||||
/mob/living/simple_mob/humanoid/starhunter/hunter/champion/do_special_attack(atom/A)
|
||||
if(prob(50))
|
||||
bullethell(A)
|
||||
else
|
||||
rapidfire_windup(A)
|
||||
|
||||
/mob/living/simple_mob/humanoid/starhunter/hunter/proc/bullethell(atom/A)
|
||||
set waitfor = FALSE
|
||||
|
||||
var/sd = dir2angle(dir)
|
||||
var/list/offsets = list(45, 45, 20, 10)
|
||||
|
||||
for(var/i = 0, i<4, i++)
|
||||
for(var/j = 0, j <4, j++)
|
||||
var/obj/item/projectile/energy/slow_orb/shot = new(get_turf(src))
|
||||
shot.firer = src
|
||||
shot.fire(sd)
|
||||
sd += 90
|
||||
sd += pick(offsets)
|
||||
sleep(20)
|
||||
|
||||
/mob/living/simple_mob/humanoid/starhunter/hunter/proc/rapidfire_windup(atom/A)
|
||||
var/list/potential_targets = ai_holder.list_targets()
|
||||
for(var/atom/entry in potential_targets)
|
||||
if(istype(entry, /mob/living/simple_mob/humanoid/starhunter/hunter))
|
||||
potential_targets -= entry
|
||||
if(potential_targets.len)
|
||||
var/iteration = clamp(potential_targets.len, 1, 3)
|
||||
for(var/i = 0, i < iteration, i++)
|
||||
if(!(potential_targets.len))
|
||||
break
|
||||
var/mob/target = pick(potential_targets)
|
||||
potential_targets -= target
|
||||
rapidfire(target)
|
||||
|
||||
/mob/living/simple_mob/humanoid/starhunter/hunter/proc/rapidfire(atom/target)
|
||||
var/list/bomb_range = block(locate(target.x-4, target.y-4, target.z), locate(target.x+4, target.y+4, target.z))
|
||||
var/obj/item/projectile/P = new /obj/item/projectile/energy/ninjastar(get_turf(src))
|
||||
bomb_range -= get_turf(target)
|
||||
for(var/i = 0, i < 4, i++)
|
||||
var/turf/T = pick(bomb_range)
|
||||
P.launch_projectile(target, BP_TORSO, src)
|
||||
bomb_range -= T
|
||||
|
||||
|
||||
/obj/item/projectile/energy/lightpillar
|
||||
name = "Light Pillar"
|
||||
icon = 'modular_chomp/icons/mob/starhunters.dmi' //commiting sin
|
||||
icon_state = "lightpillar"
|
||||
damage = 30 //DIVINE JUDGMENT
|
||||
armor_penetration = 50 //DIVINE JUDGMENT
|
||||
light_range = 5
|
||||
light_power = 5
|
||||
damage_type = BURN
|
||||
check_armour = "laser"
|
||||
light_color = "#FF6600"
|
||||
range = 7
|
||||
speed = 13
|
||||
|
||||
/obj/item/projectile/energy/ninjastar
|
||||
name = "Energy Star"
|
||||
icon = 'modular_chomp/icons/mob/starhunters.dmi' //commiting sin
|
||||
icon_state = "ninjastar"
|
||||
damage = 15
|
||||
armor_penetration = 25 //Gets into the gaps
|
||||
damage_type = BURN
|
||||
check_armour = "laser"
|
||||
//beg critters
|
||||
//kitsune is bullet hell esque in a traditonal sense
|
||||
//naga does a bunch of spawning and CoC
|
||||
//This are both training for the bigger dude I'll make later
|
||||
/mob/living/simple_mob/humanoid/starhunter/hunter/druid
|
||||
name = "Starhunter Druid"
|
||||
health = 200 //20 hits from 20 damage
|
||||
maxHealth = 200 //20 hits from 20 damage
|
||||
damage_fatigue_mult = 0
|
||||
icon_state = "snekdruid"
|
||||
icon_living = "snekdruid"
|
||||
|
||||
/mob/living/simple_mob/humanoid/starhunter/hunter/druid/do_special_attack(atom/A)
|
||||
if(prob(50))
|
||||
lightpillar(A)
|
||||
else
|
||||
fire_lines(A)
|
||||
|
||||
/mob/living/simple_mob/humanoid/starhunter/hunter/bullet_act(obj/item/projectile/P)
|
||||
if(istype(P, /obj/item/projectile/energy/lightpillar))
|
||||
visible_message(span_orange("<B>[P] seems ineffective!.</B>")) //immune to their own attack
|
||||
else
|
||||
..()
|
||||
|
||||
/mob/living/simple_mob/humanoid/starhunter/hunter/proc/lightpillar(atom/A)
|
||||
var/list/potential_targets = ai_holder.list_targets()
|
||||
for(var/atom/entry in potential_targets)
|
||||
if(istype(entry, /mob/living/simple_mob/humanoid/starhunter/hunter))
|
||||
potential_targets -= entry
|
||||
if(potential_targets.len)
|
||||
var/iteration = clamp(potential_targets.len, 1, 3)
|
||||
for(var/i = 0, i < iteration, i++)
|
||||
if(!(potential_targets.len))
|
||||
break
|
||||
var/mob/target = pick(potential_targets)
|
||||
potential_targets -= target
|
||||
spawn_lightpillar(target)
|
||||
|
||||
/mob/living/simple_mob/humanoid/starhunter/hunter/proc/spawn_lightpillar(atom/target)
|
||||
var/list/bomb_range = block(locate(target.x-4, target.y-4, target.z), locate(target.x+4, target.y+4, target.z))
|
||||
new /obj/effect/calldown_attack(get_turf(target))
|
||||
bomb_range -= get_turf(target)
|
||||
for(var/i = 0, i < 4, i++)
|
||||
var/turf/T = pick(bomb_range)
|
||||
new /mob/living/simple_mob/humanoid/starhunter/hunter/prop(T)
|
||||
bomb_range -= T
|
||||
|
||||
/mob/living/simple_mob/humanoid/starhunter/hunter/prop //This ain't a mob to spawn, but something apart of other mobs attacks and self deletes
|
||||
health = 1000
|
||||
maxHealth = 1000
|
||||
projectile_dispersion = 0
|
||||
projectile_accuracy = 100
|
||||
armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 100, bio = 100, rad = 100)
|
||||
projectiletype = /obj/item/projectile/energy/lightpillar
|
||||
ranged_attack_delay = 1.5 SECONDS
|
||||
icon_state = "prism"
|
||||
icon_living = "prism"
|
||||
|
||||
/mob/living/simple_mob/humanoid/starhunter/hunter/prop/ranged_pre_animation(atom/A)
|
||||
Beam(get_turf(A), icon_state = "sniper_beam", time = 2 SECONDS, maxdistance = 10)
|
||||
. = ..()
|
||||
|
||||
/mob/living/simple_mob/humanoid/starhunter/hunter/prop/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
|
||||
|
||||
/*
|
||||
* CHOMP Addition: This section here is (duplicated) special snowflake code because sniper does not call parent. Basically, this is a non-stupid version of the above intended for ranged mobs.
|
||||
* ranged_attack_delay is stupid because it sleeps the entire mob.
|
||||
* This new ranged_cooldown_time is smarter in the sense that it is an internalized timer. Try not to confuse the names.
|
||||
*/
|
||||
if(ranged_cooldown_time) //If you have a non-zero number in a mob's variables, this pattern begins.
|
||||
if(ranged_cooldown <= world.time) //Further down, a timer keeps adding to the ranged_cooldown variable automatically.
|
||||
visible_message("<span class='danger'><b>\The [src]</b> fires at \the [A]!</span>") //Leave notice of shooting.
|
||||
shoot(A) //Perform the shoot action
|
||||
if(casingtype) //If the mob is designated to leave casings...
|
||||
new casingtype(loc) //... leave the casing.
|
||||
ranged_cooldown = world.time + ranged_cooldown_time + ((injury_level / 2) SECONDS) //Special addition here. This is a timer. Keeping updating the time after shooting. Add that ranged cooldown time specified in the mob to the world time.
|
||||
qdel(src)
|
||||
return TRUE //End these commands here.
|
||||
// CHOMPAddition End
|
||||
|
||||
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/starhunter/hunter/proc/fire_lines(atom/A)
|
||||
var/list/potential_targets = ai_holder.list_targets()
|
||||
for(var/atom/entry in potential_targets)
|
||||
if(istype(entry, /mob/living/simple_mob/humanoid/starhunter/hunter))
|
||||
potential_targets -= entry
|
||||
if(potential_targets.len)
|
||||
var/iteration = clamp(potential_targets.len, 1, 3)
|
||||
for(var/i = 0, i < iteration, i++)
|
||||
if(!(potential_targets.len))
|
||||
break
|
||||
var/mob/target = pick(potential_targets)
|
||||
potential_targets -= target
|
||||
spawn_fire(target)
|
||||
|
||||
/mob/living/simple_mob/humanoid/starhunter/hunter/proc/spawn_fire(atom/target)
|
||||
var/alignment = rand(1,2) // 1 for vertical, 2 for horizontal
|
||||
var/list/line_range = list()
|
||||
var/turf/T = get_turf(target)
|
||||
line_range += T
|
||||
for(var/i = 1, i <= 7, i++)
|
||||
switch(alignment)
|
||||
if(1)
|
||||
if(T.x-i > 0)
|
||||
line_range += locate(T.x-i, T.y, T.z)
|
||||
if(T.x+i <= world.maxx)
|
||||
line_range += locate(T.x+i, T.y, T.z)
|
||||
if(2)
|
||||
if(T.y-i > 0)
|
||||
line_range += locate(T.x, T.y-i, T.z)
|
||||
if(T.y+i <= world.maxy)
|
||||
line_range += locate(T.x, T.y+i, T.z)
|
||||
for(var/turf/dropspot in line_range)
|
||||
new /obj/effect/calldown_attack_fire(dropspot)
|
||||
|
||||
|
||||
/obj/effect/calldown_attack_fire
|
||||
anchored = TRUE
|
||||
density = FALSE
|
||||
unacidable = TRUE
|
||||
mouse_opacity = 0
|
||||
icon = 'icons/effects/effects.dmi'
|
||||
icon_state = "drop_marker"
|
||||
|
||||
/obj/effect/calldown_attack_fire/Initialize(mapload)
|
||||
..()
|
||||
return INITIALIZE_HINT_LATELOAD
|
||||
|
||||
/obj/effect/calldown_attack_fire/LateInitialize()
|
||||
var/delay = rand(25, 30)
|
||||
spawn(delay-7)
|
||||
new /obj/fire(src.loc)
|
||||
spawn(delay)
|
||||
qdel(src)
|
||||
|
||||
|
||||
//Kitsune Stuff
|
||||
/mob/living/simple_mob/humanoid/starhunter/hunter/champion
|
||||
name = "Starhunter Starweilder"
|
||||
health = 200 //10 hits from 20 damage
|
||||
maxHealth = 200
|
||||
damage_fatigue_mult = 0
|
||||
projectiletype = /obj/item/projectile/energy/ninjastar
|
||||
icon_state = "suneswift"
|
||||
icon_living = "suneswift"
|
||||
|
||||
/mob/living/simple_mob/humanoid/starhunter/hunter/champion/do_special_attack(atom/A)
|
||||
if(prob(50))
|
||||
bullethell(A)
|
||||
else
|
||||
rapidfire_windup(A)
|
||||
|
||||
/mob/living/simple_mob/humanoid/starhunter/hunter/proc/bullethell(atom/A)
|
||||
set waitfor = FALSE
|
||||
|
||||
var/sd = dir2angle(dir)
|
||||
var/list/offsets = list(45, 45, 20, 10)
|
||||
|
||||
for(var/i = 0, i<4, i++)
|
||||
for(var/j = 0, j <4, j++)
|
||||
var/obj/item/projectile/energy/slow_orb/shot = new(get_turf(src))
|
||||
shot.firer = src
|
||||
shot.fire(sd)
|
||||
sd += 90
|
||||
sd += pick(offsets)
|
||||
sleep(20)
|
||||
|
||||
/mob/living/simple_mob/humanoid/starhunter/hunter/proc/rapidfire_windup(atom/A)
|
||||
var/list/potential_targets = ai_holder.list_targets()
|
||||
for(var/atom/entry in potential_targets)
|
||||
if(istype(entry, /mob/living/simple_mob/humanoid/starhunter/hunter))
|
||||
potential_targets -= entry
|
||||
if(potential_targets.len)
|
||||
var/iteration = clamp(potential_targets.len, 1, 3)
|
||||
for(var/i = 0, i < iteration, i++)
|
||||
if(!(potential_targets.len))
|
||||
break
|
||||
var/mob/target = pick(potential_targets)
|
||||
potential_targets -= target
|
||||
rapidfire(target)
|
||||
|
||||
/mob/living/simple_mob/humanoid/starhunter/hunter/proc/rapidfire(atom/target)
|
||||
var/list/bomb_range = block(locate(target.x-4, target.y-4, target.z), locate(target.x+4, target.y+4, target.z))
|
||||
var/obj/item/projectile/P = new /obj/item/projectile/energy/ninjastar(get_turf(src))
|
||||
bomb_range -= get_turf(target)
|
||||
for(var/i = 0, i < 4, i++)
|
||||
var/turf/T = pick(bomb_range)
|
||||
P.launch_projectile(target, BP_TORSO, src)
|
||||
bomb_range -= T
|
||||
|
||||
|
||||
/obj/item/projectile/energy/lightpillar
|
||||
name = "Light Pillar"
|
||||
icon = 'modular_chomp/icons/mob/starhunters.dmi' //commiting sin
|
||||
icon_state = "lightpillar"
|
||||
damage = 30 //DIVINE JUDGMENT
|
||||
armor_penetration = 50 //DIVINE JUDGMENT
|
||||
light_range = 5
|
||||
light_power = 5
|
||||
damage_type = BURN
|
||||
check_armour = "laser"
|
||||
light_color = "#FF6600"
|
||||
range = 7
|
||||
speed = 13
|
||||
|
||||
/obj/item/projectile/energy/ninjastar
|
||||
name = "Energy Star"
|
||||
icon = 'modular_chomp/icons/mob/starhunters.dmi' //commiting sin
|
||||
icon_state = "ninjastar"
|
||||
damage = 15
|
||||
armor_penetration = 25 //Gets into the gaps
|
||||
damage_type = BURN
|
||||
check_armour = "laser"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,438 +1,438 @@
|
||||
/mob/living/simple_mob/vore/spacecritter
|
||||
icon = 'modular_chomp/icons/mob/spaceinvader.dmi'
|
||||
health = 30
|
||||
maxHealth = 30
|
||||
movement_cooldown = 3
|
||||
aquatic_movement = 0
|
||||
|
||||
minbodytemp = 0
|
||||
maxbodytemp = 10000 // Maximum of above
|
||||
heat_damage_per_tick = 3
|
||||
cold_damage_per_tick = 2
|
||||
|
||||
min_oxy = 0
|
||||
max_oxy = 0
|
||||
min_tox = 0
|
||||
max_tox = 0
|
||||
min_co2 = 0
|
||||
max_co2 = 0
|
||||
min_n2 = 0
|
||||
max_n2 = 0
|
||||
|
||||
unsuitable_atoms_damage = 0
|
||||
heat_damage_per_tick = 0
|
||||
|
||||
melee_damage_lower = 12
|
||||
melee_damage_upper = 12
|
||||
melee_miss_chance = 0
|
||||
melee_attack_delay = 1.5
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/retaliate
|
||||
hovering = TRUE
|
||||
|
||||
heat_resist = 1.0
|
||||
cold_resist = 1.0
|
||||
shock_resist = 0.0
|
||||
water_resist = 1.0
|
||||
taser_kill = 0
|
||||
var/evolve = "/mob/living/simple_mob/vore/solarray/galaxyray"
|
||||
var/feed = "/obj/item/weapon/ore/phoron"
|
||||
var/evolvekey = "/obj/item/stack/material/tritium"
|
||||
var/copy = "/mob/living/simple_mob/vore/solarray"
|
||||
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/attackby(var/obj/item/O, var/mob/user)
|
||||
if(istype(O, evolvekey))
|
||||
user.drop_from_inventory(O)
|
||||
qdel(O)
|
||||
evolve()
|
||||
else if(istype(O, feed))
|
||||
user.drop_from_inventory(O)
|
||||
qdel(O)
|
||||
duplicate()
|
||||
else
|
||||
.=..()
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/proc/evolve()
|
||||
var/mob/living/L
|
||||
L = new evolve(get_turf(src))
|
||||
if(mind)
|
||||
src.mind.transfer_to(L)
|
||||
visible_message("<span class='warning'>\The [src] suddenly evolves!</span>")
|
||||
qdel(src)
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/proc/duplicate()
|
||||
visible_message("<span class='warning'>\The [src] splits into two!</span>")
|
||||
new copy (src.loc)
|
||||
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/solarray //solar moth lite, dies to water
|
||||
name = "solar ray"
|
||||
desc = "A sting ray of fire, drifting around"
|
||||
icon = 'modular_chomp/icons/mob/spaceinvader.dmi'
|
||||
icon_state = "solarray"
|
||||
icon_living = "solarray"
|
||||
icon_dead = "solarray-dead"
|
||||
attacktext = list("incinerate")
|
||||
attack_armor_type = "energy"
|
||||
attack_armor_pen = 30
|
||||
water_resist = 0
|
||||
|
||||
var/mycolour = COLOR_RED //Variable Lighting colours
|
||||
var/original_temp = null //Value to remember temp
|
||||
var/set_temperature = T0C + 5000 //Sets the target point of 10k degrees celsius
|
||||
var/heating_power = 50000
|
||||
|
||||
evolve = "/mob/living/simple_mob/vore/solarray/galaxyray"
|
||||
feed = "/obj/item/weapon/ore/phoron"
|
||||
evolvekey = "/obj/item/stack/material/tritium"
|
||||
copy = "/mob/living/simple_mob/vore/spacecritter/solarray"
|
||||
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/solarray/Life()
|
||||
. = ..()
|
||||
if(icon_state != icon_dead) //I mean on death() Life() should disable but i guess doesnt hurt to make sure -shark
|
||||
var/turf/moth_loc = get_turf(src)
|
||||
if(isturf(moth_loc) && moth_loc.air)
|
||||
var/datum/gas_mixture/env = moth_loc.return_air() //Gets all the information on the local air.
|
||||
var/transfer_moles = 0.25 * env.total_moles //The bigger the room, the harder it is to heat the room.
|
||||
var/datum/gas_mixture/removed = env.remove(transfer_moles)
|
||||
var/heat_transfer = removed.get_thermal_energy_change(set_temperature)
|
||||
if(heat_transfer > 0 && env.temperature < T0C + 200) //This should start heating the room at a moderate pace up to 200 degrees celsius.
|
||||
heat_transfer = min(heat_transfer , heating_power) //limit by the power rating of the heater
|
||||
removed.add_thermal_energy(heat_transfer)
|
||||
|
||||
else if(heat_transfer > 0 && env.temperature < set_temperature) //Set temperature is 10,000 degrees celsius. So this thing will start cooking crazy hot between the temperatures of 200C and 10,000C.
|
||||
heating_power = original_temp*100 //Changed to work variable -shark //FLAME ON! This will make the moth heat up the room at an incredible rate.
|
||||
heat_transfer = min(heat_transfer , heating_power) //limit by the power rating of the heater. Except it's hot, so yeah.
|
||||
removed.add_thermal_energy(heat_transfer)
|
||||
|
||||
else
|
||||
return
|
||||
|
||||
env.merge(removed)
|
||||
|
||||
|
||||
|
||||
//Since I'm changing hyper mode to be variable we need to store old power
|
||||
original_temp = heating_power
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/solarray/galaxyray
|
||||
name = "galaxy ray"
|
||||
icon_state = "galaxyray"
|
||||
icon_living = "galaxyray"
|
||||
health = 75
|
||||
maxHealth = 75
|
||||
set_temperature = T0C + 15000
|
||||
heating_power = 150000
|
||||
size_multiplier = 1.5
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/livingice //dark blue slime but more chilly. Dies to lasers or slighly toasty rooms
|
||||
name = "living icicle"
|
||||
desc = "A strange creature, a crab like creature seemingly made of ice"
|
||||
icon = 'modular_chomp/icons/mob/spaceinvader.dmi'
|
||||
icon_state = "livingice"
|
||||
icon_living = "livingice"
|
||||
icon_dead = "livingice-dead"
|
||||
minbodytemp = 0 // Minimum "okay" temperature in kelvin
|
||||
maxbodytemp = 300 // Maximum of above
|
||||
hovering = FALSE
|
||||
heat_resist = 0.2
|
||||
cold_resist = 1.0
|
||||
|
||||
evolve = "/mob/living/simple_mob/vore/spacecritter/livingice/iceberg"
|
||||
feed = "/obj/item/stack/material/snow"
|
||||
evolvekey = "/obj/item/weapon/reagent_containers/food/snacks/coldchili"
|
||||
copy = "/mob/living/simple_mob/vore/spacecritter/livingice"
|
||||
|
||||
var/chilltemp = -20
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/livingice/handle_special()
|
||||
if(stat != DEAD)
|
||||
cold_aura()
|
||||
..()
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/livingice/proc/cold_aura()
|
||||
for(var/mob/living/L in view(2, src))
|
||||
var/turf/T = get_turf(src)
|
||||
var/datum/gas_mixture/env = T.return_air()
|
||||
if(env)
|
||||
env.add_thermal_energy(chilltemp * 1000)
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/livingice/iceberg
|
||||
name = "living iceberg"
|
||||
desc = "A giant strange creature, a crab like creature seemingly made of ice"
|
||||
size_multiplier = 3.0
|
||||
health = 75
|
||||
maxHealth = 75
|
||||
chilltemp = -50
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/radcrab //bullets, melee, and cold all crack the poor thing's shell
|
||||
name = "crystaline crab"
|
||||
desc = "A largeish hermit crab glowing green, irradting the nearby area"
|
||||
icon = 'modular_chomp/icons/mob/spaceinvader.dmi'
|
||||
icon_state = "hermitcrab"
|
||||
icon_living = "hermitcrab"
|
||||
icon_dead = "hermitcrab-dead"
|
||||
aquatic_movement = 1 // If set, the mob will move through fluids with no hinderance.
|
||||
|
||||
minbodytemp = 260 // Minimum "okay" temperature in kelvin
|
||||
maxbodytemp = 10000 // Maximum of above
|
||||
melee_damage_lower = 2 // Lower bound of randomized melee damage
|
||||
melee_damage_upper = 2 // Upper bound of randomized melee damage
|
||||
attacktext = list("pinches") // "You are [attacktext] by the mob!"
|
||||
attack_armor_type = "melee" // What armor does this check?
|
||||
attack_armor_pen = 100 // How much armor pen this attack has.
|
||||
var/rads = 50
|
||||
evolve = "/mob/living/simple_mob/vore/spacecritter/radcrab/supermattercrab"
|
||||
feed = "/obj/item/weapon/ore/uranium"
|
||||
evolvekey = "/obj/item/stack/material/uranium"
|
||||
copy = "/mob/living/simple_mob/vore/spacecritter/radcrab"
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/radcrab/handle_special()
|
||||
if(stat != DEAD)
|
||||
irradiate()
|
||||
..()
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/radcrab/proc/irradiate()
|
||||
SSradiation.radiate(src, rads)
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/radcrab/supermattercrab
|
||||
size_multiplier = 1.5
|
||||
health = 75
|
||||
maxHealth = 75
|
||||
rads = 150
|
||||
name = "energized crystaline crab"
|
||||
icon_state = "superhermitcrab"
|
||||
icon_living = "superhermitcrab"
|
||||
icon_dead = "hermitcrab-dead"
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/dreameel
|
||||
name = "dream eel"
|
||||
desc = "A eel floating through it's own thick cloud"
|
||||
icon = 'modular_chomp/icons/mob/spaceinvader.dmi'
|
||||
icon_state = "dreameel"
|
||||
icon_living = "dreameel"
|
||||
icon_dead = "dreameel-dead"
|
||||
movement_cooldown = -1 // Lower is faster.
|
||||
attacktext = list("bitten") // "You are [attacktext] by the mob!"
|
||||
var/artifact_master = /datum/component/artifact_master/dreameel
|
||||
evolve = "/mob/living/simple_mob/vore/spacecritter/dreameel/nightmare"
|
||||
feed = "/obj/item/weapon/reagent_containers/food/snacks/carpmeat"
|
||||
evolvekey = "/obj/item/stack/material/phoron"
|
||||
copy = "/mob/living/simple_mob/vore/spacecritter/dreameel"
|
||||
|
||||
/datum/component/artifact_master/dreameel
|
||||
make_effects = list(
|
||||
/datum/artifact_effect/gassleeping
|
||||
)
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/dreameel/nightmare
|
||||
name = "dream eel"
|
||||
desc = "A eel floating through it's own thick cloud"
|
||||
icon = 'modular_chomp/icons/mob/spaceinvader.dmi'
|
||||
icon_state = "dreameel"
|
||||
icon_living = "dreameel"
|
||||
movement_cooldown = -5
|
||||
color = "#9933FF"
|
||||
|
||||
artifact_master = /datum/component/artifact_master/nightmare
|
||||
|
||||
/datum/component/artifact_master/nightmare
|
||||
make_effects = list(
|
||||
/datum/artifact_effect/gasphoron
|
||||
)
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/gravityshell
|
||||
name = "Gravity Shell"
|
||||
desc = "A metallic turtle"
|
||||
icon = 'modular_chomp/icons/mob/spaceinvader.dmi'
|
||||
icon_state = "gravityshell"
|
||||
icon_living = "gravityshell"
|
||||
icon_dead = "gravityshell-dead"
|
||||
movement_cooldown = 5 // Lower is faster.
|
||||
armor_soak = list( // Values for getsoak() checks.
|
||||
"melee" = 7,
|
||||
"bullet" = 7,
|
||||
"laser" = 7,
|
||||
"energy" = 7,
|
||||
"bomb" = 0,
|
||||
"bio" = 0,
|
||||
"rad" = 0
|
||||
)
|
||||
var/artifact_master = /datum/component/artifact_master/gravity
|
||||
|
||||
evolve = "/mob/living/simple_mob/vore/spacecritter/gravityshell/cleanse"
|
||||
feed = "/obj/item/stack/material/concrete"
|
||||
evolvekey = "/obj/item/stack/material/tritium"
|
||||
copy = "/mob/living/simple_mob/vore/spacecritter/gravityshell"
|
||||
|
||||
/datum/component/artifact_master/gravity
|
||||
make_effects = list(
|
||||
/datum/artifact_effect/extreme/gravity_wave
|
||||
)
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/gravityshell/cleanse
|
||||
size_multiplier = 0.5
|
||||
health = 75
|
||||
maxHealth = 75
|
||||
artifact_master = /datum/component/artifact_master/gasoxy
|
||||
icon_state = "cleanseshell"
|
||||
icon_living = "cleanseshell"
|
||||
icon_dead = "cleanseshell-dead"
|
||||
|
||||
/datum/component/artifact_master/gasoxy
|
||||
make_effects = list(
|
||||
/datum/artifact_effect/gasoxy
|
||||
)
|
||||
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/solarray
|
||||
vore_bump_chance = 80
|
||||
vore_bump_emote = "devours"
|
||||
vore_active = 1
|
||||
vore_capacity = 1
|
||||
vore_pounce_chance = 0
|
||||
vore_default_mode = DM_DIGEST
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/livingice
|
||||
vore_bump_chance = 0
|
||||
vore_bump_emote = "devours"
|
||||
vore_active = 1
|
||||
vore_capacity = 1
|
||||
vore_pounce_chance = 0
|
||||
vore_default_mode = DM_DIGEST
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/radcrab
|
||||
vore_bump_chance = 40
|
||||
vore_bump_emote = "devours"
|
||||
vore_active = 1
|
||||
vore_capacity = 1
|
||||
vore_pounce_chance = 0
|
||||
vore_default_mode = DM_DIGEST
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/dreameel
|
||||
vore_bump_chance = 40
|
||||
vore_bump_emote = "devours"
|
||||
vore_active = 1
|
||||
vore_capacity = 1
|
||||
vore_pounce_chance = 0
|
||||
vore_default_mode = DM_DIGEST
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/gravityshell
|
||||
vore_bump_chance = 40
|
||||
vore_bump_emote = "devours"
|
||||
vore_active = 1
|
||||
vore_capacity = 1
|
||||
vore_pounce_chance = 0
|
||||
vore_default_mode = DM_DIGEST
|
||||
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/solarray
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/raymeat
|
||||
meat_amount = 8
|
||||
|
||||
tame_items = list(
|
||||
/obj/item/stack/tile/grass = 50
|
||||
)
|
||||
|
||||
butchery_loot = list(\
|
||||
/obj/item/stack/material/wisp = 3\
|
||||
)
|
||||
|
||||
harvest_tool = /obj/item/weapon/weldingtool
|
||||
harvest_cooldown = 10 MINUTES
|
||||
harvest_delay = 30 SECONDS
|
||||
harvest_recent = 0
|
||||
harvest_per_hit = 1
|
||||
harvest_verb = "harvested"
|
||||
harvest_results = list(
|
||||
/obj/item/stack/material/wisp = 1
|
||||
)
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/livingice
|
||||
meat_type = /obj/item/stack/material/snow
|
||||
meat_amount = 18
|
||||
|
||||
tame_items = list(
|
||||
/obj/item/stack/material/snow = 10
|
||||
)
|
||||
|
||||
butchery_loot = list(\
|
||||
/obj/item/stack/material/frostscale = 3\
|
||||
)
|
||||
|
||||
harvest_tool = /obj/item/weapon/tool/wirecutters
|
||||
harvest_cooldown = 10 MINUTES
|
||||
harvest_delay = 30 SECONDS
|
||||
harvest_recent = 0
|
||||
harvest_per_hit = 1
|
||||
harvest_verb = "harvested"
|
||||
harvest_results = list(
|
||||
/obj/item/stack/material/frostscale = 1
|
||||
)
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/radcrab
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/crabmeat
|
||||
meat_amount = 8
|
||||
|
||||
tame_items = list(
|
||||
/obj/item/weapon/ore/uranium = 50
|
||||
)
|
||||
|
||||
butchery_loot = list(\
|
||||
/obj/item/stack/material/crystalscale = 3\
|
||||
)
|
||||
|
||||
harvest_tool = /obj/item/weapon/tool/crowbar
|
||||
harvest_cooldown = 10 MINUTES
|
||||
harvest_delay = 30 SECONDS
|
||||
harvest_recent = 0
|
||||
harvest_per_hit = 1
|
||||
harvest_verb = "harvested"
|
||||
harvest_results = list(
|
||||
/obj/item/stack/material/crystalscale = 1
|
||||
)
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/dreameel
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/eelmeat
|
||||
meat_amount = 2
|
||||
|
||||
tame_items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat/gravityshell = 40
|
||||
)
|
||||
|
||||
butchery_loot = list(\
|
||||
/obj/item/stack/material/dreamscale = 3\
|
||||
)
|
||||
|
||||
harvest_tool = /obj/item/weapon/tool/wirecutters
|
||||
harvest_cooldown = 10 MINUTES
|
||||
harvest_delay = 30 SECONDS
|
||||
harvest_recent = 0
|
||||
harvest_per_hit = 1
|
||||
harvest_verb = "harvested"
|
||||
harvest_results = list(
|
||||
/obj/item/stack/material/dreamscale = 1
|
||||
)
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/gravityshell
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/gravityshell
|
||||
meat_amount = 8
|
||||
|
||||
tame_items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/crabmeat = 50
|
||||
)
|
||||
|
||||
butchery_loot = list(\
|
||||
/obj/item/stack/material/shellchitin = 3\
|
||||
)
|
||||
|
||||
harvest_tool = /obj/item/weapon/tool/crowbar
|
||||
harvest_cooldown = 10 MINUTES
|
||||
harvest_delay = 30 SECONDS
|
||||
harvest_recent = 0
|
||||
harvest_per_hit = 1
|
||||
harvest_verb = "harvested"
|
||||
harvest_results = list(
|
||||
/obj/item/stack/material/shellchitin = 1
|
||||
)
|
||||
/mob/living/simple_mob/vore/spacecritter
|
||||
icon = 'modular_chomp/icons/mob/spaceinvader.dmi'
|
||||
health = 30
|
||||
maxHealth = 30
|
||||
movement_cooldown = 3
|
||||
aquatic_movement = 0
|
||||
|
||||
minbodytemp = 0
|
||||
maxbodytemp = 10000 // Maximum of above
|
||||
heat_damage_per_tick = 3
|
||||
cold_damage_per_tick = 2
|
||||
|
||||
min_oxy = 0
|
||||
max_oxy = 0
|
||||
min_tox = 0
|
||||
max_tox = 0
|
||||
min_co2 = 0
|
||||
max_co2 = 0
|
||||
min_n2 = 0
|
||||
max_n2 = 0
|
||||
|
||||
unsuitable_atoms_damage = 0
|
||||
heat_damage_per_tick = 0
|
||||
|
||||
melee_damage_lower = 12
|
||||
melee_damage_upper = 12
|
||||
melee_miss_chance = 0
|
||||
melee_attack_delay = 1.5
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/retaliate
|
||||
hovering = TRUE
|
||||
|
||||
heat_resist = 1.0
|
||||
cold_resist = 1.0
|
||||
shock_resist = 0.0
|
||||
water_resist = 1.0
|
||||
taser_kill = 0
|
||||
var/evolve = "/mob/living/simple_mob/vore/solarray/galaxyray"
|
||||
var/feed = "/obj/item/weapon/ore/phoron"
|
||||
var/evolvekey = "/obj/item/stack/material/tritium"
|
||||
var/copy = "/mob/living/simple_mob/vore/solarray"
|
||||
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/attackby(var/obj/item/O, var/mob/user)
|
||||
if(istype(O, evolvekey))
|
||||
user.drop_from_inventory(O)
|
||||
qdel(O)
|
||||
evolve()
|
||||
else if(istype(O, feed))
|
||||
user.drop_from_inventory(O)
|
||||
qdel(O)
|
||||
duplicate()
|
||||
else
|
||||
.=..()
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/proc/evolve()
|
||||
var/mob/living/L
|
||||
L = new evolve(get_turf(src))
|
||||
if(mind)
|
||||
src.mind.transfer_to(L)
|
||||
visible_message("<span class='warning'>\The [src] suddenly evolves!</span>")
|
||||
qdel(src)
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/proc/duplicate()
|
||||
visible_message("<span class='warning'>\The [src] splits into two!</span>")
|
||||
new copy (src.loc)
|
||||
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/solarray //solar moth lite, dies to water
|
||||
name = "solar ray"
|
||||
desc = "A sting ray of fire, drifting around"
|
||||
icon = 'modular_chomp/icons/mob/spaceinvader.dmi'
|
||||
icon_state = "solarray"
|
||||
icon_living = "solarray"
|
||||
icon_dead = "solarray-dead"
|
||||
attacktext = list("incinerate")
|
||||
attack_armor_type = "energy"
|
||||
attack_armor_pen = 30
|
||||
water_resist = 0
|
||||
|
||||
var/mycolour = COLOR_RED //Variable Lighting colours
|
||||
var/original_temp = null //Value to remember temp
|
||||
var/set_temperature = T0C + 5000 //Sets the target point of 10k degrees celsius
|
||||
var/heating_power = 50000
|
||||
|
||||
evolve = "/mob/living/simple_mob/vore/solarray/galaxyray"
|
||||
feed = "/obj/item/weapon/ore/phoron"
|
||||
evolvekey = "/obj/item/stack/material/tritium"
|
||||
copy = "/mob/living/simple_mob/vore/spacecritter/solarray"
|
||||
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/solarray/Life()
|
||||
. = ..()
|
||||
if(icon_state != icon_dead) //I mean on death() Life() should disable but i guess doesnt hurt to make sure -shark
|
||||
var/turf/moth_loc = get_turf(src)
|
||||
if(isturf(moth_loc) && moth_loc.air)
|
||||
var/datum/gas_mixture/env = moth_loc.return_air() //Gets all the information on the local air.
|
||||
var/transfer_moles = 0.25 * env.total_moles //The bigger the room, the harder it is to heat the room.
|
||||
var/datum/gas_mixture/removed = env.remove(transfer_moles)
|
||||
var/heat_transfer = removed.get_thermal_energy_change(set_temperature)
|
||||
if(heat_transfer > 0 && env.temperature < T0C + 200) //This should start heating the room at a moderate pace up to 200 degrees celsius.
|
||||
heat_transfer = min(heat_transfer , heating_power) //limit by the power rating of the heater
|
||||
removed.add_thermal_energy(heat_transfer)
|
||||
|
||||
else if(heat_transfer > 0 && env.temperature < set_temperature) //Set temperature is 10,000 degrees celsius. So this thing will start cooking crazy hot between the temperatures of 200C and 10,000C.
|
||||
heating_power = original_temp*100 //Changed to work variable -shark //FLAME ON! This will make the moth heat up the room at an incredible rate.
|
||||
heat_transfer = min(heat_transfer , heating_power) //limit by the power rating of the heater. Except it's hot, so yeah.
|
||||
removed.add_thermal_energy(heat_transfer)
|
||||
|
||||
else
|
||||
return
|
||||
|
||||
env.merge(removed)
|
||||
|
||||
|
||||
|
||||
//Since I'm changing hyper mode to be variable we need to store old power
|
||||
original_temp = heating_power
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/solarray/galaxyray
|
||||
name = "galaxy ray"
|
||||
icon_state = "galaxyray"
|
||||
icon_living = "galaxyray"
|
||||
health = 75
|
||||
maxHealth = 75
|
||||
set_temperature = T0C + 15000
|
||||
heating_power = 150000
|
||||
size_multiplier = 1.5
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/livingice //dark blue slime but more chilly. Dies to lasers or slighly toasty rooms
|
||||
name = "living icicle"
|
||||
desc = "A strange creature, a crab like creature seemingly made of ice"
|
||||
icon = 'modular_chomp/icons/mob/spaceinvader.dmi'
|
||||
icon_state = "livingice"
|
||||
icon_living = "livingice"
|
||||
icon_dead = "livingice-dead"
|
||||
minbodytemp = 0 // Minimum "okay" temperature in kelvin
|
||||
maxbodytemp = 300 // Maximum of above
|
||||
hovering = FALSE
|
||||
heat_resist = 0.2
|
||||
cold_resist = 1.0
|
||||
|
||||
evolve = "/mob/living/simple_mob/vore/spacecritter/livingice/iceberg"
|
||||
feed = "/obj/item/stack/material/snow"
|
||||
evolvekey = "/obj/item/weapon/reagent_containers/food/snacks/coldchili"
|
||||
copy = "/mob/living/simple_mob/vore/spacecritter/livingice"
|
||||
|
||||
var/chilltemp = -20
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/livingice/handle_special()
|
||||
if(stat != DEAD)
|
||||
cold_aura()
|
||||
..()
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/livingice/proc/cold_aura()
|
||||
for(var/mob/living/L in view(2, src))
|
||||
var/turf/T = get_turf(src)
|
||||
var/datum/gas_mixture/env = T.return_air()
|
||||
if(env)
|
||||
env.add_thermal_energy(chilltemp * 1000)
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/livingice/iceberg
|
||||
name = "living iceberg"
|
||||
desc = "A giant strange creature, a crab like creature seemingly made of ice"
|
||||
size_multiplier = 3.0
|
||||
health = 75
|
||||
maxHealth = 75
|
||||
chilltemp = -50
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/radcrab //bullets, melee, and cold all crack the poor thing's shell
|
||||
name = "crystaline crab"
|
||||
desc = "A largeish hermit crab glowing green, irradting the nearby area"
|
||||
icon = 'modular_chomp/icons/mob/spaceinvader.dmi'
|
||||
icon_state = "hermitcrab"
|
||||
icon_living = "hermitcrab"
|
||||
icon_dead = "hermitcrab-dead"
|
||||
aquatic_movement = 1 // If set, the mob will move through fluids with no hinderance.
|
||||
|
||||
minbodytemp = 260 // Minimum "okay" temperature in kelvin
|
||||
maxbodytemp = 10000 // Maximum of above
|
||||
melee_damage_lower = 2 // Lower bound of randomized melee damage
|
||||
melee_damage_upper = 2 // Upper bound of randomized melee damage
|
||||
attacktext = list("pinches") // "You are [attacktext] by the mob!"
|
||||
attack_armor_type = "melee" // What armor does this check?
|
||||
attack_armor_pen = 100 // How much armor pen this attack has.
|
||||
var/rads = 50
|
||||
evolve = "/mob/living/simple_mob/vore/spacecritter/radcrab/supermattercrab"
|
||||
feed = "/obj/item/weapon/ore/uranium"
|
||||
evolvekey = "/obj/item/stack/material/uranium"
|
||||
copy = "/mob/living/simple_mob/vore/spacecritter/radcrab"
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/radcrab/handle_special()
|
||||
if(stat != DEAD)
|
||||
irradiate()
|
||||
..()
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/radcrab/proc/irradiate()
|
||||
SSradiation.radiate(src, rads)
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/radcrab/supermattercrab
|
||||
size_multiplier = 1.5
|
||||
health = 75
|
||||
maxHealth = 75
|
||||
rads = 150
|
||||
name = "energized crystaline crab"
|
||||
icon_state = "superhermitcrab"
|
||||
icon_living = "superhermitcrab"
|
||||
icon_dead = "hermitcrab-dead"
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/dreameel
|
||||
name = "dream eel"
|
||||
desc = "A eel floating through it's own thick cloud"
|
||||
icon = 'modular_chomp/icons/mob/spaceinvader.dmi'
|
||||
icon_state = "dreameel"
|
||||
icon_living = "dreameel"
|
||||
icon_dead = "dreameel-dead"
|
||||
movement_cooldown = -1 // Lower is faster.
|
||||
attacktext = list("bitten") // "You are [attacktext] by the mob!"
|
||||
var/artifact_master = /datum/component/artifact_master/dreameel
|
||||
evolve = "/mob/living/simple_mob/vore/spacecritter/dreameel/nightmare"
|
||||
feed = "/obj/item/weapon/reagent_containers/food/snacks/carpmeat"
|
||||
evolvekey = "/obj/item/stack/material/phoron"
|
||||
copy = "/mob/living/simple_mob/vore/spacecritter/dreameel"
|
||||
|
||||
/datum/component/artifact_master/dreameel
|
||||
make_effects = list(
|
||||
/datum/artifact_effect/gassleeping
|
||||
)
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/dreameel/nightmare
|
||||
name = "dream eel"
|
||||
desc = "A eel floating through it's own thick cloud"
|
||||
icon = 'modular_chomp/icons/mob/spaceinvader.dmi'
|
||||
icon_state = "dreameel"
|
||||
icon_living = "dreameel"
|
||||
movement_cooldown = -5
|
||||
color = "#9933FF"
|
||||
|
||||
artifact_master = /datum/component/artifact_master/nightmare
|
||||
|
||||
/datum/component/artifact_master/nightmare
|
||||
make_effects = list(
|
||||
/datum/artifact_effect/gasphoron
|
||||
)
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/gravityshell
|
||||
name = "Gravity Shell"
|
||||
desc = "A metallic turtle"
|
||||
icon = 'modular_chomp/icons/mob/spaceinvader.dmi'
|
||||
icon_state = "gravityshell"
|
||||
icon_living = "gravityshell"
|
||||
icon_dead = "gravityshell-dead"
|
||||
movement_cooldown = 5 // Lower is faster.
|
||||
armor_soak = list( // Values for getsoak() checks.
|
||||
"melee" = 7,
|
||||
"bullet" = 7,
|
||||
"laser" = 7,
|
||||
"energy" = 7,
|
||||
"bomb" = 0,
|
||||
"bio" = 0,
|
||||
"rad" = 0
|
||||
)
|
||||
var/artifact_master = /datum/component/artifact_master/gravity
|
||||
|
||||
evolve = "/mob/living/simple_mob/vore/spacecritter/gravityshell/cleanse"
|
||||
feed = "/obj/item/stack/material/concrete"
|
||||
evolvekey = "/obj/item/stack/material/tritium"
|
||||
copy = "/mob/living/simple_mob/vore/spacecritter/gravityshell"
|
||||
|
||||
/datum/component/artifact_master/gravity
|
||||
make_effects = list(
|
||||
/datum/artifact_effect/extreme/gravity_wave
|
||||
)
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/gravityshell/cleanse
|
||||
size_multiplier = 0.5
|
||||
health = 75
|
||||
maxHealth = 75
|
||||
artifact_master = /datum/component/artifact_master/gasoxy
|
||||
icon_state = "cleanseshell"
|
||||
icon_living = "cleanseshell"
|
||||
icon_dead = "cleanseshell-dead"
|
||||
|
||||
/datum/component/artifact_master/gasoxy
|
||||
make_effects = list(
|
||||
/datum/artifact_effect/gasoxy
|
||||
)
|
||||
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/solarray
|
||||
vore_bump_chance = 80
|
||||
vore_bump_emote = "devours"
|
||||
vore_active = 1
|
||||
vore_capacity = 1
|
||||
vore_pounce_chance = 0
|
||||
vore_default_mode = DM_DIGEST
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/livingice
|
||||
vore_bump_chance = 0
|
||||
vore_bump_emote = "devours"
|
||||
vore_active = 1
|
||||
vore_capacity = 1
|
||||
vore_pounce_chance = 0
|
||||
vore_default_mode = DM_DIGEST
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/radcrab
|
||||
vore_bump_chance = 40
|
||||
vore_bump_emote = "devours"
|
||||
vore_active = 1
|
||||
vore_capacity = 1
|
||||
vore_pounce_chance = 0
|
||||
vore_default_mode = DM_DIGEST
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/dreameel
|
||||
vore_bump_chance = 40
|
||||
vore_bump_emote = "devours"
|
||||
vore_active = 1
|
||||
vore_capacity = 1
|
||||
vore_pounce_chance = 0
|
||||
vore_default_mode = DM_DIGEST
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/gravityshell
|
||||
vore_bump_chance = 40
|
||||
vore_bump_emote = "devours"
|
||||
vore_active = 1
|
||||
vore_capacity = 1
|
||||
vore_pounce_chance = 0
|
||||
vore_default_mode = DM_DIGEST
|
||||
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/solarray
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/raymeat
|
||||
meat_amount = 8
|
||||
|
||||
tame_items = list(
|
||||
/obj/item/stack/tile/grass = 50
|
||||
)
|
||||
|
||||
butchery_loot = list(\
|
||||
/obj/item/stack/material/wisp = 3\
|
||||
)
|
||||
|
||||
harvest_tool = /obj/item/weapon/weldingtool
|
||||
harvest_cooldown = 10 MINUTES
|
||||
harvest_delay = 30 SECONDS
|
||||
harvest_recent = 0
|
||||
harvest_per_hit = 1
|
||||
harvest_verb = "harvested"
|
||||
harvest_results = list(
|
||||
/obj/item/stack/material/wisp = 1
|
||||
)
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/livingice
|
||||
meat_type = /obj/item/stack/material/snow
|
||||
meat_amount = 18
|
||||
|
||||
tame_items = list(
|
||||
/obj/item/stack/material/snow = 10
|
||||
)
|
||||
|
||||
butchery_loot = list(\
|
||||
/obj/item/stack/material/frostscale = 3\
|
||||
)
|
||||
|
||||
harvest_tool = /obj/item/weapon/tool/wirecutters
|
||||
harvest_cooldown = 10 MINUTES
|
||||
harvest_delay = 30 SECONDS
|
||||
harvest_recent = 0
|
||||
harvest_per_hit = 1
|
||||
harvest_verb = "harvested"
|
||||
harvest_results = list(
|
||||
/obj/item/stack/material/frostscale = 1
|
||||
)
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/radcrab
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/crabmeat
|
||||
meat_amount = 8
|
||||
|
||||
tame_items = list(
|
||||
/obj/item/weapon/ore/uranium = 50
|
||||
)
|
||||
|
||||
butchery_loot = list(\
|
||||
/obj/item/stack/material/crystalscale = 3\
|
||||
)
|
||||
|
||||
harvest_tool = /obj/item/weapon/tool/crowbar
|
||||
harvest_cooldown = 10 MINUTES
|
||||
harvest_delay = 30 SECONDS
|
||||
harvest_recent = 0
|
||||
harvest_per_hit = 1
|
||||
harvest_verb = "harvested"
|
||||
harvest_results = list(
|
||||
/obj/item/stack/material/crystalscale = 1
|
||||
)
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/dreameel
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/eelmeat
|
||||
meat_amount = 2
|
||||
|
||||
tame_items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat/gravityshell = 40
|
||||
)
|
||||
|
||||
butchery_loot = list(\
|
||||
/obj/item/stack/material/dreamscale = 3\
|
||||
)
|
||||
|
||||
harvest_tool = /obj/item/weapon/tool/wirecutters
|
||||
harvest_cooldown = 10 MINUTES
|
||||
harvest_delay = 30 SECONDS
|
||||
harvest_recent = 0
|
||||
harvest_per_hit = 1
|
||||
harvest_verb = "harvested"
|
||||
harvest_results = list(
|
||||
/obj/item/stack/material/dreamscale = 1
|
||||
)
|
||||
|
||||
/mob/living/simple_mob/vore/spacecritter/gravityshell
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/gravityshell
|
||||
meat_amount = 8
|
||||
|
||||
tame_items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/crabmeat = 50
|
||||
)
|
||||
|
||||
butchery_loot = list(\
|
||||
/obj/item/stack/material/shellchitin = 3\
|
||||
)
|
||||
|
||||
harvest_tool = /obj/item/weapon/tool/crowbar
|
||||
harvest_cooldown = 10 MINUTES
|
||||
harvest_delay = 30 SECONDS
|
||||
harvest_recent = 0
|
||||
harvest_per_hit = 1
|
||||
harvest_verb = "harvested"
|
||||
harvest_results = list(
|
||||
/obj/item/stack/material/shellchitin = 1
|
||||
)
|
||||
|
||||
@@ -1,65 +1,65 @@
|
||||
/mob/living/simple_mob/vore/xeyakin
|
||||
name = "xeyakin"
|
||||
desc = "A strange creature, it's fur shifting, looking like liquid metal."
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/xeyakin)
|
||||
meat_amount = 30
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/xeyakin
|
||||
|
||||
icon = 'modular_chomp/icons/mob/vore64x32_ch.dmi'
|
||||
icon_state = "xeyakin" //horrid coder sprite, yay
|
||||
icon_living = "xeyakin"
|
||||
icon_dead = "xeyakin-dead"
|
||||
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 25
|
||||
melee_miss_chance = 0
|
||||
melee_attack_delay = 0
|
||||
movement_cooldown = 0
|
||||
maxHealth = 200
|
||||
attacktext = list("slashed")
|
||||
see_in_dark = 8
|
||||
minbodytemp = 0
|
||||
maxbodytemp = 99999
|
||||
min_oxy = 0
|
||||
devourable = 0
|
||||
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
default_pixel_x = -16
|
||||
pixel_x = -16
|
||||
pixel_y = 0
|
||||
|
||||
|
||||
/datum/category_item/catalogue/fauna/xeyakin
|
||||
name = "Indangered Fauna - Xeyakin"
|
||||
desc = "A strange anamalous creature. There numebers were already sparse but due to the potent chemical\
|
||||
within their meat, they have been culled to a near exctinct numeber."
|
||||
value = CATALOGUER_REWARD_SUPERHARD //Stupidly rare, hopefully anyway
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat/xeyakin
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat/xeyakin/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("xeyakinblood", 2)
|
||||
|
||||
|
||||
/datum/reagent/xeyakinblood
|
||||
name = "Xeyakin Blood"
|
||||
id = "xeyakinblood"
|
||||
description = "The blood of a legendary beast."
|
||||
taste_description = "divine"
|
||||
taste_mult = 1.5
|
||||
reagent_state = LIQUID
|
||||
color = "#FF8000"
|
||||
overdose = REAGENTS_OVERDOSE * 0.25
|
||||
scannable = 0
|
||||
|
||||
/datum/reagent/xeyakinblood/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) //should proabaly make something more special but this isn't meant to be a proper chem
|
||||
var/chem_effective = 1 * M.species.chem_strength_heal
|
||||
if(alien == IS_SLIME)
|
||||
M.adjustBruteLoss(12 * removed) //This will uber merc prometheans. It wants to turn them to crystal.
|
||||
if(alien == IS_DIONA)
|
||||
M.heal_organ_damage(0, 12 * removed * chem_effective)
|
||||
if(alien != IS_DIONA)
|
||||
M.heal_organ_damage(8, 8 * removed * chem_effective)
|
||||
/mob/living/simple_mob/vore/xeyakin
|
||||
name = "xeyakin"
|
||||
desc = "A strange creature, it's fur shifting, looking like liquid metal."
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/xeyakin)
|
||||
meat_amount = 30
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/xeyakin
|
||||
|
||||
icon = 'modular_chomp/icons/mob/vore64x32_ch.dmi'
|
||||
icon_state = "xeyakin" //horrid coder sprite, yay
|
||||
icon_living = "xeyakin"
|
||||
icon_dead = "xeyakin-dead"
|
||||
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 25
|
||||
melee_miss_chance = 0
|
||||
melee_attack_delay = 0
|
||||
movement_cooldown = 0
|
||||
maxHealth = 200
|
||||
attacktext = list("slashed")
|
||||
see_in_dark = 8
|
||||
minbodytemp = 0
|
||||
maxbodytemp = 99999
|
||||
min_oxy = 0
|
||||
devourable = 0
|
||||
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
default_pixel_x = -16
|
||||
pixel_x = -16
|
||||
pixel_y = 0
|
||||
|
||||
|
||||
/datum/category_item/catalogue/fauna/xeyakin
|
||||
name = "Indangered Fauna - Xeyakin"
|
||||
desc = "A strange anamalous creature. There numebers were already sparse but due to the potent chemical\
|
||||
within their meat, they have been culled to a near exctinct numeber."
|
||||
value = CATALOGUER_REWARD_SUPERHARD //Stupidly rare, hopefully anyway
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat/xeyakin
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat/xeyakin/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("xeyakinblood", 2)
|
||||
|
||||
|
||||
/datum/reagent/xeyakinblood
|
||||
name = "Xeyakin Blood"
|
||||
id = "xeyakinblood"
|
||||
description = "The blood of a legendary beast."
|
||||
taste_description = "divine"
|
||||
taste_mult = 1.5
|
||||
reagent_state = LIQUID
|
||||
color = "#FF8000"
|
||||
overdose = REAGENTS_OVERDOSE * 0.25
|
||||
scannable = 0
|
||||
|
||||
/datum/reagent/xeyakinblood/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) //should proabaly make something more special but this isn't meant to be a proper chem
|
||||
var/chem_effective = 1 * M.species.chem_strength_heal
|
||||
if(alien == IS_SLIME)
|
||||
M.adjustBruteLoss(12 * removed) //This will uber merc prometheans. It wants to turn them to crystal.
|
||||
if(alien == IS_DIONA)
|
||||
M.heal_organ_damage(0, 12 * removed * chem_effective)
|
||||
if(alien != IS_DIONA)
|
||||
M.heal_organ_damage(8, 8 * removed * chem_effective)
|
||||
|
||||
Reference in New Issue
Block a user