mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-10 14:44:05 +01:00
Merge pull request #5090 from Fox-McCloud/mob-death-refactor
Refactors Simple Animal Death and Implements Spawners
This commit is contained in:
@@ -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"
|
||||
Reference in New Issue
Block a user