Merge pull request #5090 from Fox-McCloud/mob-death-refactor

Refactors Simple Animal Death and Implements Spawners
This commit is contained in:
TheDZD
2016-07-21 10:08:25 -04:00
committed by GitHub
37 changed files with 190 additions and 349 deletions
@@ -21,6 +21,8 @@
universal_speak = 1
var/list/construct_spells = list()
loot = list(/obj/item/weapon/reagent_containers/food/snacks/ectoplasm)
del_on_death = 1
deathmessage = "collapses in a shattered heap."
/mob/living/simple_animal/construct/New()
..()
@@ -30,15 +32,6 @@
AddSpell(new spell(null))
updateglow()
/mob/living/simple_animal/construct/death()
..()
for(var/mob/M in viewers(src, null))
if((M.client && !( M.blinded )))
M.show_message("\red [src] collapses in a shattered heap. ")
ghostize()
qdel(src)
return
/mob/living/simple_animal/construct/examine(mob/user)
to_chat(user, "<span class='info'>*---------*</span>")
..(user)
@@ -38,7 +38,7 @@
. = ..()
regenerate_icons()
/mob/living/simple_animal/pet/corgi/death()
/mob/living/simple_animal/pet/corgi/death(gibbed)
..()
regenerate_icons()
@@ -612,6 +612,8 @@
atmos_requirements = list("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
loot = list(/obj/effect/decal/cleanable/blood/gibs/robot)
del_on_death = 1
deathmessage = "blows apart!"
/mob/living/simple_animal/pet/corgi/Ian/borgi/emag_act(user as mob)
if(!emagged)
@@ -656,12 +658,8 @@
s.set_up(3, 1, src)
s.start()
/mob/living/simple_animal/pet/corgi/Ian/borgi/death()
..()
visible_message("<b>[src]</b> blows apart!")
/mob/living/simple_animal/pet/corgi/Ian/borgi/death(gibbed)
var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
s.set_up(3, 1, src)
s.start()
respawnable_list += src
qdel(src)
return
..()
@@ -241,7 +241,7 @@ var/global/chicken_count = 0
pixel_y = rand(0, 10)
chicken_count += 1
/mob/living/simple_animal/chicken/death()
/mob/living/simple_animal/chicken/death(gibbed)
..()
chicken_count -= 1
@@ -116,7 +116,7 @@
M << 'sound/effects/mousesqueek.ogg'
..()
/mob/living/simple_animal/mouse/death()
/mob/living/simple_animal/mouse/death(gibbed)
layer = MOB_LAYER
if(client)
client.time_died_as_mouse = world.time
@@ -17,7 +17,7 @@
..()
regenerate_icons()
/mob/living/simple_animal/pet/death()
/mob/living/simple_animal/pet/death(gibbed)
..()
regenerate_icons()
@@ -64,21 +64,18 @@
response_harm = "stomps on"
emote_see = list("jiggles", "bounces in place")
var/colour = "grey"
del_on_death = 1
/mob/living/simple_animal/adultslime/New()
..()
overlays += "aslime-:33"
/mob/living/simple_animal/slime/adult/death()
var/mob/living/simple_animal/slime/S1 = new /mob/living/simple_animal/slime (src.loc)
S1.icon_state = "[src.colour] baby slime"
S1.icon_living = "[src.colour] baby slime"
S1.icon_dead = "[src.colour] baby slime dead"
S1.colour = "[src.colour]"
var/mob/living/simple_animal/slime/S2 = new /mob/living/simple_animal/slime (src.loc)
S2.icon_state = "[src.colour] baby slime"
S2.icon_living = "[src.colour] baby slime"
S2.icon_dead = "[src.colour] baby slime dead"
S2.colour = "[src.colour]"
qdel(src)
/mob/living/simple_animal/slime/adult/death(gibbed)
for(var/i in 1 to 2)
var/mob/living/simple_animal/slime/S = new /mob/living/simple_animal/slime (src.loc)
S.icon_state = "[colour] baby slime"
S.icon_living = "[colour] baby slime"
S.icon_dead = "[colour] baby slime dead"
S.colour = "[colour]"
..()
@@ -40,6 +40,8 @@
speak_emote = list("beeps","clicks","chirps")
can_hide = 1
ventcrawler = 2
loot = list(/obj/effect/decal/cleanable/blood/gibs/robot)
del_on_death = 1
/mob/living/simple_animal/spiderbot/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
@@ -205,20 +207,14 @@
..()
/mob/living/simple_animal/spiderbot/death()
living_mob_list -= src
dead_mob_list += src
/mob/living/simple_animal/spiderbot/death(gibbed)
if(camera)
camera.status = 0
if(held_item)
held_item.forceMove(src.loc)
held_item = null
robogibs(src.loc, viruses)
qdel(src)
..()
//Cannibalized from the parrot mob. ~Zuhayr
@@ -21,15 +21,16 @@
a_intent = I_HARM
attack_sound = 'sound/weapons/bladeslice.ogg'
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
var/dead = 0
unsuitable_atmos_damage = 15
heat_damage_per_tick = 20
faction = list("alien")
status_flags = CANPUSH
minbodytemp = 0
see_in_dark = 8
see_invisible = SEE_INVISIBLE_MINIMUM
heat_damage_per_tick = 20
gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
death_sound = 'sound/voice/hiss6.ogg'
deathmessage = "lets out a waning guttural screech, green blood bubbling from its maw..."
/mob/living/simple_animal/hostile/alien/drone
@@ -47,7 +48,6 @@
/mob/living/simple_animal/hostile/alien/drone/handle_automated_action()
if(!..()) //AIStatus is off
return
plant_cooldown--
if(AIStatus == AI_IDLE)
if(!plants_off && prob(10) && plant_cooldown<=0)
@@ -136,14 +136,6 @@
damage = 30
icon_state = "toxin"
/mob/living/simple_animal/hostile/alien/death()
..()
if(dead == 0)
dead = 1
visible_message("[src] lets out a waning guttural screech, green blood bubbling from its maw...")
playsound(src, 'sound/voice/hiss6.ogg', 100, 1)
/mob/living/simple_animal/hostile/alien/maid
name = "lusty xenomorph maid"
melee_damage_lower = 0
@@ -39,6 +39,7 @@
//Spaceborn beings don't get hurt by space
atmos_requirements = list("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
del_on_death = 1
var/datum/reagent/beegent = null //hehe, beegent
var/obj/structure/beebox/beehome = null
@@ -61,8 +62,6 @@
/mob/living/simple_animal/hostile/poison/bees/death(gibbed)
beegent = null
..()
ghostize()
qdel(src)
/mob/living/simple_animal/hostile/poison/bees/examine(mob/user)
..()
@@ -55,12 +55,8 @@
icon_living = "holocarp"
maxbodytemp = INFINITY
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
del_on_death = 1
/mob/living/simple_animal/hostile/carp/holocarp/death()
..()
ghostize()
qdel(src)
return
/mob/living/simple_animal/hostile/carp/megacarp
icon = 'icons/mob/alienqueen.dmi'
@@ -24,6 +24,8 @@
speak_emote = list("states")
gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
loot = list(/obj/effect/decal/cleanable/blood/gibs/robot)
deathmessage = "blows apart!"
del_on_death = 1
/mob/living/simple_animal/hostile/hivebot/range
name = "Hivebot"
@@ -45,15 +47,11 @@
maxHealth = 80
ranged = 1
/mob/living/simple_animal/hostile/hivebot/death()
..()
visible_message("<b>[src]</b> blows apart!")
/mob/living/simple_animal/hostile/hivebot/death(gibbed)
var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
s.set_up(3, 1, src)
s.start()
ghostize()
qdel(src)
return
..()
/mob/living/simple_animal/hostile/hivebot/tele//this still needs work
name = "Beacon"
@@ -219,7 +219,7 @@
//////////////END HOSTILE MOB TARGETTING AND AGGRESSION////////////
/mob/living/simple_animal/hostile/death()
/mob/living/simple_animal/hostile/death(gibbed)
LoseAggro()
mouse_opacity = 1
..()
@@ -16,6 +16,8 @@
var/life_span = INFINITY //how long until they despawn
var/mob/living/parent_mob
var/multiply_chance = 0 //if we multiply on hit
deathmessage = "vanishes into thin air! It was a fake!"
del_on_death = 1
/mob/living/simple_animal/hostile/illusion/Life()
@@ -23,12 +25,6 @@
if(world.time > life_span)
death()
/mob/living/simple_animal/hostile/illusion/death(gibbed)
..()
visible_message("<span class='danger'>\The [src] vanishes into thin air! It was a fake!</span>")
ghostize()
qdel(src)
/mob/living/simple_animal/hostile/illusion/proc/Copy_Parent(mob/living/original, life = 50, health = 100, damage = 0, replicate = 0 )
appearance = original.appearance
parent_mob = original
@@ -27,18 +27,13 @@
var/is_electronic = 0
gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
del_on_death = 1
/mob/living/simple_animal/hostile/mimic/FindTarget()
. = ..()
if(.)
custom_emote(1, "growls at [.]")
/mob/living/simple_animal/hostile/mimic/death()
..()
visible_message("<span class='danger'>[src]</b> stops moving!</span>")
ghostize()
qdel(src)
/mob/living/simple_animal/hostile/mimic/emp_act(severity)
if(is_electronic)
switch(severity)
@@ -100,7 +95,7 @@
..()
icon_state = initial(icon_state)
/mob/living/simple_animal/hostile/mimic/crate/death()
/mob/living/simple_animal/hostile/mimic/crate/death(gibbed)
var/obj/structure/closet/crate/C = new(get_turf(src))
// Put loot in crate
for(var/obj/O in src)
@@ -135,7 +130,7 @@ var/global/list/protected_objects = list(/obj/structure/table, /obj/structure/ca
for(var/mob/living/M in contents) //a fix for animated statues from the flesh to stone spell
death()
/mob/living/simple_animal/hostile/mimic/copy/death()
/mob/living/simple_animal/hostile/mimic/copy/death(gibbed)
for(var/atom/movable/M in src)
M.loc = get_turf(src)
@@ -194,7 +194,7 @@
visible_message("<span class='danger'>The [P.name] was repelled by [src.name]'s girth!</span>")
return
/mob/living/simple_animal/hostile/asteroid/goldgrub/death()
/mob/living/simple_animal/hostile/asteroid/goldgrub/death(gibbed)
alerted = 0
Reward()
..()
@@ -321,14 +321,12 @@
throw_message = "falls right through the strange body of the"
environment_smash = 0
pass_flags = PASSTABLE
del_on_death = 1
/mob/living/simple_animal/hostile/asteroid/hivelordbrood/New()
..()
spawn(100)
qdel(src)
/mob/living/simple_animal/hostile/asteroid/hivelordbrood/death()
qdel(src)
death()
/mob/living/simple_animal/hostile/asteroid/goliath
name = "goliath"
@@ -26,6 +26,7 @@
ventcrawler = 2
robust_searching = 1
speak_emote = list("squeaks")
deathmessage = "fainted"
var/powerlevel = 0 //Tracks our general strength level gained from eating other shrooms
var/bruised = 0 //If someone tries to cheat the system by attacking a shroom to lower its health, punish them so that it wont award levels to shrooms that eat it
var/recovery_cooldown = 0 //So you can't repeatedly revive it during a fight
@@ -88,8 +89,7 @@
icon_state = "mushroom_color"
UpdateMushroomCap()
/mob/living/simple_animal/hostile/mushroom/death()
visible_message("<span class='notice'>[src] fainted.</span>")
/mob/living/simple_animal/hostile/mushroom/death(gibbed)
..()
UpdateMushroomCap()
@@ -24,6 +24,7 @@
speak_emote = list("yarrs")
loot = list(/obj/effect/landmark/mobcorpse/pirate,
/obj/item/weapon/melee/energy/sword/pirate)
del_on_death = 1
faction = list("pirate")
/mob/living/simple_animal/hostile/pirate/ranged
@@ -38,11 +39,4 @@
minimum_distance = 5
projectiletype = /obj/item/projectile/beam
loot = list(/obj/effect/landmark/mobcorpse/pirate/ranged,
/obj/item/weapon/gun/energy/laser)
/mob/living/simple_animal/hostile/pirate/death()
..()
ghostize()
qdel(src)
return
/obj/item/weapon/gun/energy/laser)
@@ -40,6 +40,8 @@
var/has_loot = 1
faction = list("malf_drone")
deathmessage = "suddenly breaks apart."
del_on_death = 1
/mob/living/simple_animal/hostile/retaliate/malf_drone/New()
..()
@@ -149,11 +151,6 @@
hostile_drone = 0
walk(src,0)
/mob/living/simple_animal/hostile/retaliate/malf_drone/death()
..()
visible_message("\blue [bicon(src)] [src] suddenly breaks apart.")
qdel(src)
/mob/living/simple_animal/hostile/retaliate/malf_drone/Destroy() //Seriously, what the actual hell.
//some random debris left behind
if(has_loot)
@@ -46,6 +46,7 @@
faction = list("undead") // did I mention ghost
loot = list(/obj/item/weapon/reagent_containers/food/snacks/ectoplasm)
del_on_death = 1
/mob/living/simple_animal/hostile/retaliate/ghost/Process_Spacemove(var/check_drift = 0)
return 1
@@ -61,10 +62,6 @@
else
invisibility = pick(0,60,60,invisibility)
..()
/mob/living/simple_animal/hostile/retaliate/ghost/death()
..()
qdel(src)
return
/mob/living/simple_animal/hostile/retaliate/skeleton
name = "skeleton"
@@ -92,11 +89,7 @@
faction = list("undead")
loot = list(/obj/effect/decal/remains/human)
/mob/living/simple_animal/hostile/retaliate/skeleton/death()
..()
qdel(src)
return
del_on_death = 1
/mob/living/simple_animal/hostile/retaliate/zombie
name = "zombie"
@@ -124,8 +117,4 @@
faction = list("undead")
loot = list(/obj/effect/decal/cleanable/blood/gibs)
/mob/living/simple_animal/hostile/retaliate/zombie/death()
..()
qdel(src)
return
del_on_death = 1
@@ -24,6 +24,7 @@
status_flags = CANPUSH
loot = list(/obj/effect/landmark/mobcorpse/russian,
/obj/item/weapon/kitchen/knife)
del_on_death = 1
/mob/living/simple_animal/hostile/russian/ranged
@@ -39,8 +40,3 @@
loot = list(/obj/effect/landmark/mobcorpse/russian/ranged,
/obj/item/weapon/gun/projectile/shotgun/boltaction)
casingtype = /obj/item/ammo_casing/a762
/mob/living/simple_animal/hostile/russian/death()
..()
qdel(src)
return
@@ -184,7 +184,7 @@
//Harder to kill the head, but it can kill off the whole worm
/mob/living/simple_animal/hostile/spaceWorm/wormHead/death()
/mob/living/simple_animal/hostile/spaceWorm/wormHead/death(gibbed)
..()
if(prob(catastrophicDeathProb))
for(var/mob/living/simple_animal/hostile/spaceWorm/SW in totalWormSegments)
@@ -294,7 +294,7 @@
qdel(src)
/mob/living/simple_animal/hostile/spaceWorm/death()
/mob/living/simple_animal/hostile/spaceWorm/death(gibbed)
..()
if(myHead)
myHead.totalWormSegments -= src
@@ -24,11 +24,7 @@
check_friendly_fire = 1
status_flags = CANPUSH
loot = list(/obj/effect/landmark/mobcorpse/syndicatesoldier)
/mob/living/simple_animal/hostile/syndicate/death()
..()
qdel(src)
return
del_on_death = 1
///////////////Sword and shield////////////
@@ -124,9 +120,5 @@
minbodytemp = 0
flying = 1
gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
/mob/living/simple_animal/hostile/viscerator/death()
..()
visible_message("\red <b>[src]</b> is smashed into pieces!")
qdel(src)
return
del_on_death = 1
deathmessage = "is smashed into pieces!"
@@ -30,6 +30,8 @@
faction = list("hostile", "winter")
loot = list(/obj/item/stack/sheet/wood)
gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
deathmessage = "is hacked into pieces!"
del_on_death = 1
/mob/living/simple_animal/hostile/tree/FindTarget()
. = ..()
@@ -42,9 +44,4 @@
if(istype(L))
if(prob(15))
L.Weaken(3)
L.visible_message("<span class='danger'>\the [src] knocks down \the [L]!</span>")
/mob/living/simple_animal/hostile/tree/death()
..()
visible_message("\red <b>[src]</b> is hacked into pieces!")
qdel(src)
L.visible_message("<span class='danger'>\the [src] knocks down \the [L]!</span>")
@@ -33,14 +33,14 @@
gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
/mob/living/simple_animal/hostile/winter/snowman/death()
/mob/living/simple_animal/hostile/winter/snowman/death(gibbed)
if(prob(50)) //50% chance to drop weapon on death, if it has one to drop
loot = list(/obj/item/weapon/melee/candy_sword)
if(prob(20)) //chance to become a stationary snowman structure instead of a corpse
loot.Add(/obj/structure/snowman)
visible_message("<span class='notice'>The [src.name] shimmers as its animating magic fades away!</span>")
deathmessage = "shimmers as its animating magic fades away!"
del_on_death = 1
..() //this is just to make sure it gets properly killed before we qdel it
qdel(src)
else
..()
@@ -73,7 +73,7 @@
icon_living = "santa"
icon_dead = "santa-dead"
/mob/living/simple_animal/hostile/winter/santa/death()
/mob/living/simple_animal/hostile/winter/santa/death(gibbed)
..()
if(death_message)
visible_message(death_message)
@@ -121,7 +121,7 @@
melee_damage_lower = 15
melee_damage_upper = 25 //that's gonna leave a mark, for sure
/mob/living/simple_animal/hostile/winter/santa/stage_4/death()
/mob/living/simple_animal/hostile/winter/santa/stage_4/death(gibbed)
to_chat(world, "<span class='notice'><hr></span>")
to_chat(world, "<span class='notice'>THE FAT MAN HAS FALLEN!</span>")
to_chat(world, "<span class='notice'>SANTA CLAUS HAS BEEN DEFEATED!</span>")
@@ -112,7 +112,7 @@
hear_radio_list -= src
return ..()
/mob/living/simple_animal/parrot/death()
/mob/living/simple_animal/parrot/death(gibbed)
if(held_item)
held_item.loc = src.loc
held_item = null
@@ -25,16 +25,10 @@
faction = list("cult")
status_flags = CANPUSH
loot = list(/obj/item/weapon/reagent_containers/food/snacks/ectoplasm)
del_on_death = 1
deathmessage = "lets out a contented sigh as their form unwinds."
death()
..()
for(var/mob/M in viewers(src, null))
if((M.client && !( M.blinded )))
M.show_message("\red [src] lets out a contented sigh as their form unwinds. ")
ghostize()
qdel(src)
attackby(var/obj/item/O as obj, var/mob/user as mob) //Marker -Agouri
if(istype(O, /obj/item/device/soulstone))
O.transfer_soul("SHADE", src, user)
@@ -71,8 +71,14 @@
var/gold_core_spawnable = CHEM_MOB_SPAWN_INVALID //if CHEM_MOB_SPAWN_HOSTILE can be spawned by plasma with gold core, CHEM_MOB_SPAWN_FRIENDLY are 'friendlies' spawned with blood
var/master_commander = null //holding var for determining who own/controls a sentient simple animal (for sentience potions).
var/mob/living/simple_animal/hostile/spawner/nest
var/sentience_type = SENTIENCE_ORGANIC // Sentience type, for slime potions
var/list/loot = list() //list of things spawned at mob's loc when it dies
var/del_on_death = 0 //causes mob to be deleted on death, useful for mobs that spawn lootable corpses
var/deathmessage = ""
var/death_sound = null //The sound played on death
/mob/living/simple_animal/New()
@@ -469,15 +475,28 @@
stat(null, "Health: [round((health / maxHealth) * 100)]%")
/mob/living/simple_animal/death(gibbed)
if(nest)
nest.spawned_mobs -= src
nest = null
if(loot.len)
for(var/i in loot)
new i(loc)
health = 0
icon_state = icon_dead
stat = DEAD
density = 0
if(!gibbed)
visible_message("<span class='danger'>\The [src] stops moving...</span>")
if(death_sound)
playsound(get_turf(src),death_sound, 200, 1)
if(deathmessage)
visible_message("<span class='danger'>\The [src] [deathmessage]</span>")
else if(!del_on_death)
visible_message("<span class='danger'>\The [src] stops moving...</span>")
if(del_on_death)
ghostize()
qdel(src)
else
health = 0
icon_state = icon_dead
stat = DEAD
density = 0
lying = 1
..()
/mob/living/simple_animal/ex_act(severity)
@@ -0,0 +1,83 @@
/mob/living/simple_animal/hostile/spawner
name = "monster nest"
icon = 'icons/mob/animal.dmi'
health = 100
maxHealth = 100
var/list/spawned_mobs = list()
var/max_mobs = 5
var/spawn_delay = 0
var/spawn_time = 300 //30 seconds default
var/mob_type = /mob/living/simple_animal/hostile/carp
var/spawn_text = "emerges from"
status_flags = 0
anchored = 1
AIStatus = AI_OFF
a_intent = "harm"
stop_automated_movement = 1
wander = 0
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
maxbodytemp = 350
layer = MOB_LAYER-0.1
sentience_type = SENTIENCE_BOSS
/mob/living/simple_animal/hostile/spawner/Destroy()
for(var/mob/living/simple_animal/L in spawned_mobs)
if(L.nest == src)
L.nest = null
spawned_mobs = null
return ..()
/mob/living/simple_animal/hostile/spawner/process_ai()
..()
spawn_mob()
/mob/living/simple_animal/hostile/spawner/proc/spawn_mob()
if(spawned_mobs.len >= max_mobs)
return 0
if(spawn_delay > world.time)
return 0
spawn_delay = world.time + spawn_time
var/mob/living/simple_animal/L = new mob_type(src.loc)
spawned_mobs += L
L.nest = src
L.faction = src.faction
visible_message("<span class='danger'>[L] [spawn_text] [src].</span>")
/mob/living/simple_animal/hostile/spawner/syndicate
name = "warp beacon"
icon = 'icons/obj/device.dmi'
icon_state = "syndbeacon"
spawn_text = "warps in from"
mob_type = /mob/living/simple_animal/hostile/syndicate/ranged
faction = list("syndicate")
/mob/living/simple_animal/hostile/spawner/mining
name = "monster den"
desc = "A hole dug into the ground, harboring all kinds of monsters found within most caves or mining asteroids."
icon_state = "hole"
icon_living = "hole"
health = 200
maxHealth = 200
max_mobs = 3
icon = 'icons/mob/nest.dmi'
spawn_text = "crawls out of"
mob_type = /mob/living/simple_animal/hostile/asteroid/goldgrub
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
faction = list("mining")
/mob/living/simple_animal/hostile/spawner/mining/goliath
name = "goliath den"
desc = "A den housing a nest of goliaths, oh god why?"
mob_type = /mob/living/simple_animal/hostile/asteroid/goliath
/mob/living/simple_animal/hostile/spawner/mining/hivelord
name = "hivelord den"
desc = "A den housing a nest of hivelords."
mob_type = /mob/living/simple_animal/hostile/asteroid/hivelord
/mob/living/simple_animal/hostile/spawner/mining/basilisk
name = "basilisk den"
desc = "A den housing a nest of basilisks, bring a coat."
mob_type = /mob/living/simple_animal/hostile/asteroid/basilisk
@@ -79,7 +79,7 @@ var/global/totaltribbles = 0 //global variable so it updates for all tribbles,
src.procreate()
/mob/living/simple_animal/tribble/death() // Gotta make sure to remove tribbles from the list on death
/mob/living/simple_animal/tribble/death(gibbed) // Gotta make sure to remove tribbles from the list on death
..()
totaltribbles -= 1
@@ -1,169 +0,0 @@
/mob/living/simple_animal/vox/armalis/
name = "serpentine alien"
real_name = "serpentine alien"
desc = "A one-eyed, serpentine creature, half-machine, easily nine feet from tail to beak!"
icon = 'icons/mob/vox.dmi'
icon_state = "armalis"
icon_living = "armalis"
maxHealth = 500
health = 500
response_harm = "slashes at the"
harm_intent_damage = 0
melee_damage_lower = 30
melee_damage_upper = 40
attacktext = "slammed its enormous claws into"
speed = -1
attack_sound = 'sound/weapons/bladeslice.ogg'
status_flags = 0
universal_speak = 1
var/armour = null
var/amp = null
var/quills = 3
/mob/living/simple_animal/vox/armalis/death(gibbed)
if(!gibbed)
stat = DEAD
visible_message("<span class='danger'>[src] shudders violently and explodes!</B>","\red <B>You feel your body rupture!</span>")
explosion(get_turf(loc), -1, -1, 3, 5)
gib()
return
return ..()
/mob/living/simple_animal/vox/armalis/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
if(O.force)
if(O.force >= 25)
var/damage = O.force
if(O.damtype == STAMINA)
damage = 0
health -= damage
for(var/mob/M in viewers(src, null))
if((M.client && !( M.blinded )))
M.show_message("\red \b [src] has been attacked with the [O] by [user]. ")
else
for(var/mob/M in viewers(src, null))
if((M.client && !( M.blinded )))
M.show_message("\red \b The [O] bounces harmlessly off of [src]. ")
else
to_chat(usr, "\red This weapon is ineffective, it does no damage.")
for(var/mob/M in viewers(src, null))
if((M.client && !( M.blinded )))
M.show_message("\red [user] gently taps [src] with the [O]. ")
/mob/living/simple_animal/vox/armalis/verb/fire_quill(mob/target as mob in oview())
set name = "Fire quill"
set desc = "Fires a viciously pointed quill at a high speed."
set category = "Alien"
if(quills<=0)
return
to_chat(src, "\red You launch a razor-sharp quill at [target]!")
for(var/mob/O in oviewers())
if((O.client && !( O.blinded )))
to_chat(O, "\red [src] launches a razor-sharp quill at [target]!")
var/obj/item/weapon/quill/Q = new(loc)
Q.fingerprintslast = src.ckey
Q.throw_at(target,10,30)
quills--
spawn(100)
to_chat(src, "\red You feel a fresh quill slide into place.")
quills++
/obj/item/weapon/quill
name = "vox quill"
desc = "A wickedly barbed quill from some bizarre animal."
icon_state = "quill"
item_state = "quill"
throwforce = 5
w_class = 3
sharp = 1
edge = 0
/mob/living/simple_animal/vox/armalis/verb/message_mob()
set category = "Alien"
set name = "Commune with creature"
set desc = "Send a telepathic message to an unlucky recipient."
var/list/targets = list()
var/target = null
var/text = null
targets += getmobs() //Fill list, prompt user with list
target = input("Select a creature!", "Speak to creature", null, null) as null|anything in targets
text = input("What would you like to say?", "Speak to creature", null, null)
if(!target || !text)
return
var/mob/M = targets[target]
if(istype(M, /mob/dead/observer) || M.stat == DEAD)
to_chat(src, "Not even the armalis can speak to the dead.")
return
to_chat(M, "\blue Like lead slabs crashing into the ocean, alien thoughts drop into your mind: [text]")
if(istype(M,/mob/living/carbon/human))
var/mob/living/carbon/human/H = M
if(H.species.name == "Vox")
return
to_chat(H, "\red Your nose begins to bleed...")
H.drip(1)
/mob/living/simple_animal/vox/armalis/verb/shriek()
set category = "Alien"
set name = "Shriek"
set desc = "Give voice to a psychic shriek."
/mob/living/simple_animal/vox/armalis/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
if(istype(O,/obj/item/vox/armalis_armour))
user.drop_item()
armour = O
speed = 1
maxHealth += 200
health += 200
O.loc = src
visible_message("\blue [src] is quickly outfitted in [O] by [user].","\blue You quickly outfit [src] in [O].")
regenerate_icons()
return
if(istype(O,/obj/item/vox/armalis_amp))
user.drop_item()
amp = O
O.loc = src
visible_message("\blue [src] is quickly outfitted in [O] by [user].","\blue You quickly outfit [src] in [O].")
regenerate_icons()
return
return ..()
/mob/living/simple_animal/vox/armalis/regenerate_icons()
overlays = list()
if(armour)
var/icon/armour = image('icons/mob/vox.dmi',"armour")
speed = 1
overlays += armour
if(amp)
var/icon/amp = image('icons/mob/vox.dmi',"amplifier")
overlays += amp
return
/obj/item/vox/armalis_armour
name = "strange armour"
desc = "Hulking reinforced armour for something huge."
icon = 'icons/obj/clothing/suits.dmi'
icon_state = "armour-armalis"
item_state = "armour-armalis"
/obj/item/vox/armalis_amp
name = "strange lenses"
desc = "A series of metallic lenses and chains."
icon = 'icons/obj/clothing/hats.dmi'
icon_state = "amp"
item_state = "amp"