diff --git a/code/game/gamemodes/blob/blobs/factory.dm b/code/game/gamemodes/blob/blobs/factory.dm
index bc83a3bb3b..ca1c3f206e 100644
--- a/code/game/gamemodes/blob/blobs/factory.dm
+++ b/code/game/gamemodes/blob/blobs/factory.dm
@@ -19,5 +19,48 @@
run_action()
if(spores.len >= max_spores) return 0
- new/obj/effect/critter/blob(src.loc, src)
+ new/mob/living/simple_animal/hostile/blobspore(src.loc, src)
return 1
+
+
+/mob/living/simple_animal/hostile/blobspore
+ name = "blob"
+ desc = "Some blob thing."
+ icon = 'icons/mob/critter.dmi'
+ icon_state = "blobsquiggle"
+ icon_living = "blobsquiggle"
+ pass_flags = PASSBLOB
+ health = 20
+ maxHealth = 20
+ melee_damage_lower = 4
+ melee_damage_upper = 8
+ attacktext = "hits"
+ attack_sound = 'sound/weapons/genhit1.ogg'
+ var/obj/effect/blob/factory/factory = null
+ faction = "blob"
+ 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
+ maxbodytemp = 360
+
+
+ New(loc, var/obj/effect/blob/factory/linked_node)
+ ..()
+ if(istype(linked_node))
+ factory = linked_node
+ factory.spores += src
+ ..(loc)
+ return
+ Die()
+ ..()
+ if(factory)
+ factory.spores -= src
+ ..()
+ del(src)
+
diff --git a/code/game/gamemodes/sandbox/h_sandbox.dm b/code/game/gamemodes/sandbox/h_sandbox.dm
index 64e418f0ee..439befdc63 100644
--- a/code/game/gamemodes/sandbox/h_sandbox.dm
+++ b/code/game/gamemodes/sandbox/h_sandbox.dm
@@ -144,8 +144,6 @@ datum/hSB
continue
if(istype(O, /obj/item/weapon/melee/energy/sword))
continue
- if(istype(O, /obj/effect/critter))
- continue
if(istype(O, /obj/structure))
continue
selectable += O
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index 60283d659d..7237f529ec 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -66,14 +66,6 @@
open()
return
- if(istype(AM, /obj/effect/critter))
- var/obj/effect/critter/critter = AM
- if(critter.opensdoors) return
- if(src.check_access_list(critter.access_list))
- if(density)
- open()
- return
-
if(istype(AM, /obj/mecha))
var/obj/mecha/mecha = AM
if(density)
diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm
index 8449218845..fbc28292c3 100644
--- a/code/game/machinery/portable_turret.dm
+++ b/code/game/machinery/portable_turret.dm
@@ -449,9 +449,6 @@ Status: []
"},
var/list/secondarytargets = list() // targets that are least important
if(src.check_anomalies) // if its set to check for xenos/carps, check for non-mob "crittersssss"(And simple_animals)
- for (var/obj/effect/critter/L in view(7,src))
- if(L.alive)
- targets += L
for(var/mob/living/simple_animal/C in view(7,src))
if(!C.stat)
targets += C
@@ -506,15 +503,6 @@ Status: []
"},
spawn() popUp() // pop the turret up if it's not already up.
dir=get_dir(src,M) // even if you can't shoot, follow the target
spawn() shootAt(M) // shoot the target, finally
- else
-
- if (istype(t, /obj/effect/critter)) // shoot other things, same process as above
- var/obj/effect/critter/L = t
- if (L.alive==1)
- spawn() popUp()
- dir=get_dir(src,L)
- spawn() shootAt(L)
-
else
if(secondarytargets.len>0) // if there are no primary targets, go for secondary targets
diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm
index 63c43db7d2..1bcf177cf4 100644
--- a/code/game/mecha/mecha.dm
+++ b/code/game/mecha/mecha.dm
@@ -469,23 +469,6 @@
user.attack_log += text("\[[time_stamp()]\] attacked [src.name]")
return
-
-/obj/mecha/proc/attack_critter(obj/effect/critter/C)
- src.log_message("Attack by creature. Attacker - [C].",1)
- var/damage = max(0, rand(C.melee_damage_lower - 5, C.melee_damage_upper - 5 ))
-
- if(!prob(src.deflect_chance) && damage > 0)
- src.take_damage(damage)
- src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
- playsound(src.loc, "sparks", 50, 1)
- visible_message("\red [C] hits [src.name]'s armor!")
- else
- src.log_append_to_last("Armor saved.")
- src.occupant_message("\blue [C]'s attack is stopped by the armor.")
- visible_message("\blue [C] rebounds off [src.name]'s armor!")
- return
-
-
/obj/mecha/hitby(atom/movable/A as mob|obj) //wrapper
src.log_message("Hit by [A].",1)
call((proc_res["dynhitby"]||src), "dynhitby")(A)
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index f91e27d5a9..101cb43a43 100644
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -283,9 +283,6 @@
for(var/obj/mecha/M in src)//Mecha are not gibbed but are damaged.
spawn(0)
M.take_damage(100, "brute")
- for(var/obj/effect/critter/M in src)
- spawn(0)
- M.Die()
/turf/proc/Bless()
if(flags & NOJAUNT)
diff --git a/code/modules/critters/critter.dm b/code/modules/critters/critter.dm
deleted file mode 100644
index cc52021737..0000000000
--- a/code/modules/critters/critter.dm
+++ /dev/null
@@ -1,129 +0,0 @@
-//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
-
-/obj/effect/critter
- name = "Critter"
- desc = "Generic critter."
- icon = 'icons/mob/critter.dmi'
- icon_state = "basic"
- layer = 5.0
- density = 1
- anchored = 0
- var/alive = 1
- var/health = 10
- var/max_health = 10
- var/list/access_list = list()//accesses go here
-//AI things
- var/task = "thinking"
- //Attacks at will
- var/aggressive = 1
- //Will target an attacker
- var/defensive = 0
- //Will randomly move about
- var/wanderer = 1
- //Will open doors it bumps ignoring access
- var/opensdoors = 0
- //Will randomly travel through vents
- var/ventcrawl = 0
-
- //Internal tracking ignore
- var/frustration = 0
- var/max_frustration = 8
- var/attack = 0
- var/attacking = 0
- var/steps = 0
- var/last_found = null
- var/target = null
- var/oldtarget_name = null
- var/target_lastloc = null
-
- var/thinkspeed = 15
- var/chasespeed = 4
- var/wanderspeed = 10
- //The last guy who attacked it
- var/attacker = null
- //Will not attack this thing
- var/friend = null
- //How far to look for things dont set this overly high
- var/seekrange = 7
-
- //If true will attack these things
- var/atkcarbon = 1
- var/atksilicon = 0
- var/atkcritter = 0
- //Attacks critters of the same type
- var/atksame = 0
- var/atkmech = 0
-
- //Attacks syndies/traitors (distinguishes via mind)
- var/atksynd = 1
- //Attacks things NOT in its obj/req_access list
- var/atkreq = 0
-
- //Damage multipliers
- var/brutevuln = 1
- var/firevuln = 1
- //DR
- var/armor = 0
-
- //How much damage it does it melee
- var/melee_damage_lower = 1
- var/melee_damage_upper = 2
- //Basic attack message when they move to attack and attack
- var/angertext = "charges at"
- var/attacktext = "attacks"
- var/deathtext = "dies!"
-
- var/chasestate = null // the icon state to use when attacking or chasing a target
- var/attackflick = null // the icon state to flick when it attacks
- var/attack_sound = null // the sound it makes when it attacks!
-
- var/attack_speed = 25 // delay of attack
-
-
- proc/AfterAttack(var/mob/living/target)
- return
-
-
-
-/* TODO:Go over these and see how/if to add them
-
- proc/set_attack()
- state = 1
- if(path_idle.len) path_idle = new/list()
- trg_idle = null
-
- proc/set_idle()
- state = 2
- if (path_target.len) path_target = new/list()
- target = null
- frustration = 0
-
- proc/set_null()
- state = 0
- if (path_target.len) path_target = new/list()
- if (path_idle.len) path_idle = new/list()
- target = null
- trg_idle = null
- frustration = 0
-
- proc/path_idle(var/atom/trg)
- path_idle = AStar(src.loc, get_turf(trg), /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 250, anicard, null)
- path_idle = reverselist(path_idle)
-
- proc/path_attack(var/atom/trg)
- path_target = AStar(src.loc, trg.loc, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 250, anicard, null)
- path_target = reverselist(path_target)
-
-
-//Look these over
- var/list/path = new/list()
- var/patience = 35 //The maximum time it'll chase a target.
- var/list/mob/living/carbon/flee_from = new/list()
- var/list/path_target = new/list() //The path to the combat target.
-
- var/turf/trg_idle //It's idle target, the one it's following but not attacking.
- var/list/path_idle = new/list() //The path to the idle target.
-
-
-
-*/
diff --git a/code/modules/critters/critter_AI.dm b/code/modules/critters/critter_AI.dm
deleted file mode 100644
index 3c33e3bdcf..0000000000
--- a/code/modules/critters/critter_AI.dm
+++ /dev/null
@@ -1,241 +0,0 @@
-
-/obj/effect/critter
-
- New(loc)
- spawn(0) process()//I really dont like this much but it seems to work well
- ..(loc)
-
-
- process()
- set background = 1
- if (!src.alive) return
- switch(task)
- if("thinking")
- src.attack = 0
- src.target = null
- sleep(thinkspeed)
- walk_to(src,0)
- if (src.aggressive) seek_target()
- if (src.wanderer && !src.target) src.task = "wandering"
- if("chasing")
- if (src.frustration >= max_frustration)
- src.target = null
- src.last_found = world.time
- src.frustration = 0
- src.task = "thinking"
- walk_to(src,0)
- if (target)
- if (get_dist(src, src.target) <= 1)
- var/mob/living/carbon/M = src.target
- ChaseAttack()
- src.task = "attacking"
- if(chasestate)
- icon_state = chasestate
- src.anchored = 1
- src.target_lastloc = M.loc
- else
- var/turf/olddist = get_dist(src, src.target)
- walk_to(src, src.target,1,chasespeed)
- if ((get_dist(src, src.target)) >= (olddist))
- src.frustration++
- else
- src.frustration = 0
- sleep(5)
- else src.task = "thinking"
- if("attacking")
- // see if he got away
- if ((get_dist(src, src.target) > 1) || ((src.target:loc != src.target_lastloc)))
- src.anchored = 0
- src.task = "chasing"
- if(chasestate)
- icon_state = chasestate
- else
- if (get_dist(src, src.target) <= 1)
- var/mob/living/carbon/M = src.target
- if(!src.attacking) RunAttack()
- if(!src.aggressive)
- src.task = "thinking"
- src.target = null
- src.anchored = 0
- src.last_found = world.time
- src.frustration = 0
- src.attacking = 0
- else
- if(M!=null)
- if(ismob(src.target))
- if(M.health < 0)
- src.task = "thinking"
- src.target = null
- src.anchored = 0
- src.last_found = world.time
- src.frustration = 0
- src.attacking = 0
- else
- src.anchored = 0
- src.attacking = 0
- src.task = "chasing"
- if(chasestate)
- icon_state = chasestate
- if("wandering")
- if(chasestate)
- icon_state = initial(icon_state)
- patrol_step()
- sleep(wanderspeed)
- spawn(8)
- process()
- return
-
-
- proc/patrol_step()
- var/moveto = locate(src.x + rand(-1,1),src.y + rand(-1, 1),src.z)
- if (istype(moveto, /turf/simulated/floor) || istype(moveto, /turf/simulated/shuttle/floor) || istype(moveto, /turf/unsimulated/floor)) step_towards(src, moveto)
- if(src.aggressive) seek_target()
- steps += 1
- if (steps == rand(5,20)) src.task = "thinking"
-
-
- Bump(M as mob|obj)//TODO: Add access levels here
- spawn(0)
- if((istype(M, /obj/machinery/door)))
- if(src.opensdoors)
- M:open()
- src.frustration = 0
- else src.frustration ++
- if((istype(M, /mob/living/)) && (!src.anchored))
- src.loc = M:loc
- src.frustration = 0
- return
- return
-
-
- Bumped(M as mob|obj)
- spawn(0)
- var/turf/T = get_turf(src)
- M:loc = T
-
-
- proc/seek_target()
- src.anchored = 0
- var/T = null
- for(var/mob/living/C in view(src.seekrange,src))//TODO: mess with this
- if (src.target)
- src.task = "chasing"
- break
-
- // Ignore syndicates and traitors if specified
- if(!atksynd && C.mind)
- var/datum/mind/synd_mind = C.mind
- if( synd_mind.special_role == "Syndicate" || synd_mind.special_role == "traitor" )
- continue
- if((C.name == src.oldtarget_name) && (world.time < src.last_found + 100)) continue
- if(istype(C, /mob/living/carbon/) && !src.atkcarbon) continue
- if(istype(C, /mob/living/silicon/) && !src.atksilicon) continue
- if(atkreq)
- if(src.allowed(C)) continue
- if(C.health < 0) continue
- if(istype(C, /mob/living/carbon/) && src.atkcarbon) src.attack = 1
- if(istype(C, /mob/living/silicon/) && src.atksilicon) src.attack = 1
- if(atkreq)
- if(!src.allowed(C)) src.attack = 1
- if(src.attack)
- T = C
- break
-
- if(!src.attack)
- for(var/obj/effect/critter/C in view(src.seekrange,src))
- if(!src.atkcritter) continue
- if(C.health <= 0) continue
- if(src.atkcritter)
- if((istype(C, src.type) && !src.atksame) || (C == src)) continue
- src.attack = 1
- if(src.attack)
- T = C
- break
-
- if(!src.attack)
- for(var/obj/mecha/C in view(src.seekrange,src))
- if(!C.occupant) continue
-
- if(atkreq && C.occupant)
- if(src.allowed(C.occupant)) continue
-
- if(!atksynd && C.occupant)
- if(C.occupant.mind)
- var/datum/mind/synd_mind = C.occupant.mind
- if( synd_mind.special_role == "Syndicate" || synd_mind.special_role == "traitor" )
- continue
-
- if(!src.atkmech) continue
- if(C.health <= 0) continue
- if(src.atkmech) src.attack = 1
- if(src.attack)
- T = C
- break
-
- if(src.attack)
- src.target = T
- src.oldtarget_name = T:name
- src.task = "chasing"
- return
-
-
- proc/ChaseAttack()
- for(var/mob/O in viewers(src, null))
- O.show_message("\red [src] [src.angertext] at [src.target]!", 1)
- return
-
-
- proc/RunAttack()
- src.attacking = 1
- if(ismob(src.target))
-
- for(var/mob/O in viewers(src, null))
- O.show_message("\red [src] [src.attacktext] [src.target]!", 1)
-
- var/damage = rand(melee_damage_lower, melee_damage_upper)
-
- if(ishuman(target))
- var/mob/living/carbon/human/H = target
- var/dam_zone = pick("chest", "l_hand", "r_hand", "l_leg", "r_leg")
- var/datum/organ/external/affecting = H.get_organ(ran_zone(dam_zone))
- H.apply_damage(damage, BRUTE, affecting, H.run_armor_check(affecting, "melee"))
- else if(isliving(target))
- var/mob/living/L = target
- L.adjustBruteLoss(damage)
-
- if(attack_sound)
- playsound(loc, attack_sound, 50, 1, -1)
-
- AfterAttack(target)
-
-
- if(isobj(src.target))
- if(istype(target, /obj/mecha))
- //src.target:take_damage(rand(melee_damage_lower,melee_damage_upper))
- src.target:attack_critter(src)
- else
- src.target:TakeDamage(rand(melee_damage_lower,melee_damage_upper))
- spawn(attack_speed)
- src.attacking = 0
- return
-
-
-
-/*TODO: Figure out how to handle special things like this dont really want to give it to every critter
-/obj/effect/critter/proc/CritterTeleport(var/telerange, var/dospark, var/dosmoke)
- if (!src.alive) return
- var/list/randomturfs = new/list()
- for(var/turf/T in orange(src, telerange))
- if(istype(T, /turf/space) || T.density) continue
- randomturfs.Add(T)
- src.loc = pick(randomturfs)
- if (dospark)
- var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
- s.set_up(5, 1, src)
- s.start()
- if (dosmoke)
- var/datum/effect/system/harmless_smoke_spread/smoke = new /datum/effect/system/harmless_smoke_spread()
- smoke.set_up(10, 0, src.loc)
- smoke.start()
- src.task = "thinking"
-*/
\ No newline at end of file
diff --git a/code/modules/critters/critter_defenses.dm b/code/modules/critters/critter_defenses.dm
deleted file mode 100644
index 5dcef77903..0000000000
--- a/code/modules/critters/critter_defenses.dm
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
-Contains the procs that control attacking critters
-*/
-/obj/effect/critter
-
- attackby(obj/item/weapon/W as obj, mob/living/user as mob)
- ..()
- if(!src.alive)
- Harvest(W,user)
- return
- var/damage = 0
- switch(W.damtype)
- if("fire") damage = W.force * firevuln
- if("brute") damage = W.force * brutevuln
- TakeDamage(damage)
- if(src.defensive && alive) Target_Attacker(user)
- return
-
-
- attack_hand(var/mob/user as mob)
- if (!src.alive) ..()
- if (user.a_intent == "hurt")
- TakeDamage(rand(1,2) * brutevuln)
-
- if(istype(user, /mob/living/carbon/human))
- for(var/mob/O in viewers(src, null))
- O.show_message("\red [user] has punched [src]!", 1)
- playsound(src.loc, pick('sound/weapons/punch1.ogg','sound/weapons/punch2.ogg','sound/weapons/punch3.ogg','sound/weapons/punch4.ogg'), 100, 1)
-
- else if(istype(user, /mob/living/carbon/alien/humanoid))
- for(var/mob/O in viewers(src, null))
- O.show_message("\red [user] has slashed at [src]!", 1)
- playsound(src.loc, 'sound/weapons/slice.ogg', 25, 1, -1)
-
- else
- for(var/mob/O in viewers(src, null))
- O.show_message("\red [user] has bit [src]!", 1)
-
- if(src.defensive) Target_Attacker(user)
- else
- for(var/mob/O in viewers(src, null))
- O.show_message("\blue [user] touches [src]!", 1)
-
-
- proc/Target_Attacker(var/target)
- if(!target) return
- src.target = target
- src.oldtarget_name = target:name
- if(task != "chasing" && task != "attacking")
- if(angertext && angertext != "")
- for(var/mob/O in viewers(src, null))
- O.show_message("\red [src] [src.angertext] at [target:name]!", 1)
- src.task = "chasing"
- return
-
-
- proc/TakeDamage(var/damage = 0)
- var/tempdamage = (damage-armor)
- if(tempdamage > 0)
- src.health -= tempdamage
- else
- src.health--
- if(src.health <= 0)
- src.Die()
-
-
- proc/Die()
- if (!src.alive) return
- src.icon_state += "-dead"
- src.alive = 0
- src.anchored = 0
- src.density = 0
- walk_to(src,0)
- src.visible_message("[src] [deathtext]")
-
-
- proc/Harvest(var/obj/item/weapon/W, var/mob/living/user)
- if((!W) || (!user)) return 0
- if(src.alive) return 0
- return 1
-
-
- bullet_act(var/obj/item/projectile/Proj)
- TakeDamage(Proj.damage)
- ..()
-
-
- ex_act(severity)
- switch(severity)
- if(1.0)
- src.Die()
- return
- if(2.0)
- TakeDamage(20)
- return
- return
-
-
- emp_act(serverity)
- switch(serverity)
- if(1.0)
- src.Die()
- return
- if(2.0)
- TakeDamage(20)
- return
- return
-
-
- meteorhit()
- src.Die()
- return
-
-
- blob_act()
- if(prob(25))
- src.Die()
- return
-
- attack_animal(mob/living/simple_animal/M as mob)
- if(M.melee_damage_upper == 0)
- M.emote("[M.friendly] [src]")
- else
- for(var/mob/O in viewers(src, null))
- O.show_message("\red [M] [M.attacktext] [src]!", 1)
- var/damage = rand(M.melee_damage_lower, M.melee_damage_upper)
- TakeDamage(damage)
- return
\ No newline at end of file
diff --git a/code/modules/critters/critters.dm b/code/modules/critters/critters.dm
deleted file mode 100644
index 03027ec104..0000000000
--- a/code/modules/critters/critters.dm
+++ /dev/null
@@ -1,127 +0,0 @@
-/obj/effect/critter/creature
- name = "creature"
- desc = "A sanity-destroying otherthing."
- icon_state = "otherthing"
- health = 80
- max_health = 80
- aggressive = 1
- defensive = 1
- wanderer = 1
- opensdoors = 1
- atkcarbon = 1
- atksilicon = 1
- atkcritter = 1
- atkmech = 1
- atksame = 1
- firevuln = 1
- brutevuln = 1
- melee_damage_lower = 25
- melee_damage_upper = 50
- angertext = "runs"
- attacktext = "chomps"
- attack_sound = 'sound/weapons/bite.ogg'
-
-
-/obj/effect/critter/roach
- name = "cockroach"
- desc = "An unpleasant insect that lives in filthy places."
- icon_state = "roach"
- health = 5
- max_health = 5
- aggressive = 0
- defensive = 1
- wanderer = 1
- atkcarbon = 1
- atksilicon = 0
- attacktext = "bites"
-
- Die()
- ..()
- del(src)
-
-/obj/effect/critter/spore
- name = "plasma spore"
- desc = "A barely intelligent colony of organisms. Very volatile."
- icon_state = "spore"
- density = 1
- health = 1
- max_health = 1
- aggressive = 0
- defensive = 0
- wanderer = 1
- atkcarbon = 0
- atksilicon = 0
- firevuln = 2
- brutevuln = 2
-
-
-/* process()
- if(prob(50))
- TakeDamage(1)
- ..()*/
-
-
- Die()
- src.visible_message("[src] ruptures and explodes!")
- src.alive = 0
- var/turf/T = get_turf(src.loc)
- if(T)
- T.hotspot_expose(700,125)
- explosion(T, -1, -1, 2, 3)
- del src
-
-
- ex_act(severity)
- src.Die()
-
-
-/obj/effect/critter/blob
- name = "blob"
- desc = "Some blob thing."
- icon_state = "blob"
- pass_flags = PASSBLOB
- health = 20
- max_health = 20
- aggressive = 1
- defensive = 0
- wanderer = 1
- atkcarbon = 1
- atksilicon = 1
- firevuln = 2
- brutevuln = 0.5
- melee_damage_lower = 2
- melee_damage_upper = 8
- angertext = "charges"
- attacktext = "hits"
- attack_sound = 'sound/weapons/genhit1.ogg'
- var/obj/effect/blob/factory/factory = null
-
- New(loc, var/obj/effect/blob/factory/linked_node)
- if(istype(linked_node))
- factory = linked_node
- factory.spores += src
- ..(loc)
- return
-
- Die()
- if(factory)
- factory.spores -= src
- ..()
- del(src)
-
-
-
-/obj/effect/critter/lizard
- name = "Lizard"
- desc = "A cute tiny lizard."
- icon_state = "lizard"
- health = 5
- max_health = 5
- aggressive = 0
- defensive = 1
- wanderer = 1
- opensdoors = 0
- atkcarbon = 1
- atksilicon = 1
- attacktext = "bites"
-
diff --git a/code/modules/mob/living/blob/blob.dm b/code/modules/mob/living/blob/blob.dm
index e49c166f1b..2e8f86282f 100644
--- a/code/modules/mob/living/blob/blob.dm
+++ b/code/modules/mob/living/blob/blob.dm
@@ -8,6 +8,7 @@
see_invisible = SEE_INVISIBLE_LEVEL_TWO
var/ghost_name = "Unknown"
var/creating_blob = 0
+ faction = "blob"
New()
@@ -251,3 +252,7 @@
B << "Check your Blob verbs and hit Create Node to build a node."
spawn(10)
del(G_found)
+
+
+
+
diff --git a/code/modules/mob/living/carbon/human/hud.dm b/code/modules/mob/living/carbon/human/hud.dm
index 817529aff0..5ded037ac1 100644
--- a/code/modules/mob/living/carbon/human/hud.dm
+++ b/code/modules/mob/living/carbon/human/hud.dm
@@ -438,10 +438,6 @@ Radar-related things
if(M.stat == 2) continue
found_targets.Add(M)
- for(var/obj/effect/critter/C in orange(max_dist, distance_ref))
- if(!C.alive) continue
- found_targets.Add(C)
-
for(var/obj/mecha/M in orange(max_dist, distance_ref))
if(!M.occupant) continue
found_targets.Add(M)
@@ -495,10 +491,6 @@ Radar-related things
blip.icon_state = "unknownblip"
blip.name = "Unknown Organism"
- else if(istype(A, /obj/effect/critter))
- blip.icon_state = "unknownblip"
- blip.name = "Unknown Organism"
-
else if(istype(A, /obj/mecha))
blip.icon_state = "roboblip"
blip.name = "Robotic Organism"
diff --git a/code/modules/mob/living/simple_animal/friendly/lizard.dm b/code/modules/mob/living/simple_animal/friendly/lizard.dm
new file mode 100644
index 0000000000..4a235c30fa
--- /dev/null
+++ b/code/modules/mob/living/simple_animal/friendly/lizard.dm
@@ -0,0 +1,17 @@
+/mob/living/simple_animal/lizard
+ name = "Lizard"
+ desc = "A cute tiny lizard."
+ icon = 'icons/mob/critter.dmi'
+ icon_state = "lizard"
+ icon_living = "lizard"
+ icon_dead = "lizard-dead"
+ speak_emote = list("hisses")
+ health = 5
+ maxHealth = 5
+ attacktext = "bites"
+ attacktext = "bites"
+ melee_damage_lower = 1
+ melee_damage_upper = 2
+ response_help = "pets"
+ response_disarm = "shoos"
+ response_harm = "stomps on"
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/friendly/tomato.dm b/code/modules/mob/living/simple_animal/friendly/tomato.dm
index 244c070a71..1248e702d2 100644
--- a/code/modules/mob/living/simple_animal/friendly/tomato.dm
+++ b/code/modules/mob/living/simple_animal/friendly/tomato.dm
@@ -12,6 +12,4 @@
response_help = "prods the"
response_disarm = "pushes aside the"
response_harm = "smacks the"
- harm_intent_damage = 5
-
-/mob/living/simple_animal/tomato
\ No newline at end of file
+ harm_intent_damage = 5
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/hostile/creature.dm b/code/modules/mob/living/simple_animal/hostile/creature.dm
new file mode 100644
index 0000000000..b02ba0469d
--- /dev/null
+++ b/code/modules/mob/living/simple_animal/hostile/creature.dm
@@ -0,0 +1,15 @@
+/mob/living/simple_animal/hostile/creature
+ name = "creature"
+ desc = "A sanity-destroying otherthing."
+ icon = 'icons/mob/critter.dmi'
+ speak_emote = list("gibbers")
+ icon_state = "otherthing"
+ icon_living = "otherthing"
+ icon_dead = "otherthing-dead"
+ health = 80
+ maxHealth = 80
+ melee_damage_lower = 25
+ melee_damage_upper = 50
+ attacktext = "chomps"
+ attack_sound = 'sound/weapons/bite.ogg'
+ faction = "creature"
diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm
index eaf0ce6065..05674763da 100644
--- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm
+++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm
@@ -136,8 +136,9 @@
/mob/living/simple_animal/hostile/viscerator
name = "viscerator"
desc = "A small, twin-bladed machine capable of inflicting very deadly lacerations."
- icon_state = "viscerator"
- icon_living = "viscerator"
+ icon = 'icons/mob/critter.dmi'
+ icon_state = "viscerator_attack"
+ icon_living = "viscerator_attack"
pass_flags = PASSTABLE
health = 15
maxHealth = 15
diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm
index cf01be55bb..a8d5bfac18 100644
--- a/code/modules/reagents/Chemistry-Recipes.dm
+++ b/code/modules/reagents/Chemistry-Recipes.dm
@@ -789,7 +789,7 @@ datum
required_other = 4
on_reaction(var/datum/reagents/holder, var/created_volume)
- var/list/critters = typesof(/obj/effect/critter) - /obj/effect/critter // list of possible critters
+ var/list/critters = typesof(/mob/living/simple_animal/hostile) - /mob/living/simple_animal/hostile // list of possible hostile mobs
playsound(get_turf_loc(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
@@ -799,7 +799,7 @@ datum
for(var/i = 1, i <= created_volume, i++)
var/chosen = pick(critters)
- var/obj/effect/critter/C = new chosen
+ var/mob/living/simple_animal/hostile/C = new chosen
C.loc = get_turf_loc(holder.my_atom)
if(prob(50))
for(var/j = 1, j <= rand(1, 3), j++)
diff --git a/maps/RandomZLevels/stationCollision.dmm b/maps/RandomZLevels/stationCollision.dmm
index 33e525b540..c07283577f 100644
--- a/maps/RandomZLevels/stationCollision.dmm
+++ b/maps/RandomZLevels/stationCollision.dmm
@@ -94,7 +94,7 @@
"bP" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/awaymission/research)
"bQ" = (/obj/structure/filingcabinet/filingcabinet,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
"bR" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/eastleft,/obj/machinery/door/window/westright,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
-"bS" = (/obj/effect/critter/lizard,/turf/simulated/floor/grass,/area/awaymission/research)
+"bS" = (/mob/living/simple_animal/lizard,/turf/simulated/floor/grass,/area/awaymission/research)
"bT" = (/turf/simulated/floor/grass,/area/awaymission/research)
"bU" = (/mob/living/carbon/monkey,/turf/simulated/floor/grass,/area/awaymission/research)
"bV" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-burst_r (EAST)"; icon_state = "burst_r"; dir = 4},/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/awaymission/syndishuttle)
@@ -106,7 +106,7 @@
"cb" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/awaymission/research)
"cc" = (/mob/living/carbon/alien/humanoid/sentinel{fireloss = 200; stat = 2},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
"cd" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/awaymission/research)
-"ce" = (/obj/effect/critter/creature{name = "Experiment 35b"},/turf/simulated/floor,/area/awaymission/research)
+"ce" = (/mob/living/simple_animal/hostile/creature{name = "Experiment 35b"},/turf/simulated/floor,/area/awaymission/research)
"cf" = (/obj/machinery/dna_scannernew,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
"cg" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/grass,/area/awaymission/research)
"ch" = (/obj/machinery/emitter{anchored = 1; state = 2},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/research)
diff --git a/maps/RandomZLevels/wildwest.dmm b/maps/RandomZLevels/wildwest.dmm
index 9cb1c3b0d6..5e8c60838d 100644
--- a/maps/RandomZLevels/wildwest.dmm
+++ b/maps/RandomZLevels/wildwest.dmm
@@ -134,16 +134,16 @@
"cD" = (/obj/structure/table/woodentable,/obj/item/clothing/gloves/yellow,/obj/item/device/multitool,/turf/simulated/floor/wood,/area/awaymission/wwgov)
"cE" = (/obj/structure/stool/bed/chair/wood/normal{dir = 4},/turf/simulated/floor/wood,/area/awaymission/wwgov)
"cF" = (/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/awaymission/wwgov)
-"cG" = (/obj/effect/critter/creature,/turf/simulated/floor{tag = "icon-stage_bleft"; icon_state = "stage_bleft"},/area/awaymission/wwgov)
+"cG" = (/mob/living/simple_animal/hostile/creature,/turf/simulated/floor{tag = "icon-stage_bleft"; icon_state = "stage_bleft"},/area/awaymission/wwgov)
"cH" = (/obj/effect/landmark/corpse/chef{mobname = "Chef"},/turf/simulated/floor{tag = "icon-stage_bleft"; icon_state = "stage_bleft"},/area/awaymission/wwgov)
"cI" = (/obj/structure/bookcase{tag = "icon-book-5"; icon_state = "book-5"},/turf/simulated/floor/wood,/area/awaymission/wwmines)
"cJ" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/condiment/peppermill,/turf/simulated/floor/wood,/area/awaymission/wwmines)
"cK" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/condiment/saltshaker,/turf/simulated/floor/wood,/area/awaymission/wwmines)
"cL" = (/obj/structure/table/woodentable,/obj/item/weapon/twohanded/dualsaber,/turf/simulated/floor/wood,/area/awaymission/wwgov)
"cM" = (/obj/effect/landmark/corpse/miner/rig,/turf/simulated/floor/wood,/area/awaymission/wwgov)
-"cN" = (/obj/effect/critter/creature,/turf/simulated/floor/wood,/area/awaymission/wwgov)
+"cN" = (/mob/living/simple_animal/hostile/creature,/turf/simulated/floor/wood,/area/awaymission/wwgov)
"cO" = (/obj/structure/mineral_door/wood{tag = "icon-woodopening"; icon_state = "woodopening"},/turf/simulated/floor/wood,/area/awaymission/wwgov)
-"cP" = (/obj/effect/critter/creature,/turf/simulated/floor/carpet,/area/awaymission/wwgov)
+"cP" = (/mob/living/simple_animal/hostile/creature,/turf/simulated/floor/carpet,/area/awaymission/wwgov)
"cQ" = (/obj/structure/window/reinforced{tag = "icon-fwindow (WEST)"; icon_state = "fwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-fwindow (EAST)"; icon_state = "fwindow"; dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-fwindow"; icon_state = "fwindow"},/turf/simulated/floor/plating/ironsand{tag = "icon-ironsand1"; icon_state = "ironsand1"},/area/awaymission/wwgov)
"cR" = (/obj/structure/stool/bed/chair/wood/wings{dir = 4},/turf/simulated/floor/wood,/area/awaymission/wwgov)
"cS" = (/obj/structure/window/reinforced{tag = "icon-fwindow (EAST)"; icon_state = "fwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-fwindow (WEST)"; icon_state = "fwindow"; dir = 8},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-fwindow"; icon_state = "fwindow"},/turf/simulated/floor/plating/ironsand{tag = "icon-ironsand1"; icon_state = "ironsand1"},/area/awaymission/wwgov)
@@ -181,7 +181,7 @@
"dy" = (/obj/effect/landmark/corpse/miner/rig,/turf/simulated/floor/wood,/area/awaymission/wwmines)
"dz" = (/turf/simulated/floor/plating/ironsand{tag = "icon-ironsand12"; icon_state = "ironsand12"},/area/awaymission/wwgov)
"dA" = (/turf/simulated/floor/plating/ironsand{tag = "icon-ironsand14"; icon_state = "ironsand14"},/area/awaymission/wwgov)
-"dB" = (/obj/structure/toilet,/obj/effect/critter/creature,/turf/simulated/floor{tag = "icon-white"; icon_state = "white"},/area/awaymission/wwgov)
+"dB" = (/obj/structure/toilet,/mob/living/simple_animal/hostile/creature,/turf/simulated/floor{tag = "icon-white"; icon_state = "white"},/area/awaymission/wwgov)
"dC" = (/turf/simulated/floor/plating/ironsand{tag = "icon-ironsand9"; icon_state = "ironsand9"},/area/awaymission/wwgov)
"dD" = (/obj/structure/mineral_door/wood{tag = "icon-woodopening"; icon_state = "woodopening"},/turf/simulated/floor/plating/ironsand{tag = "icon-ironsand1"; icon_state = "ironsand1"},/area/awaymission/wwgov)
"dE" = (/obj/structure/largecrate,/turf/simulated/floor/wood,/area/awaymission/wwmines)
@@ -323,7 +323,7 @@
"gk" = (/mob/living/simple_animal/hostile/syndicate,/turf/simulated/floor/wood,/area/awaymission/wwmines)
"gl" = (/obj/machinery/photocopier,/turf/simulated/floor/wood,/area/awaymission/wwmines)
"gm" = (/obj/item/weapon/gun/projectile,/turf/simulated/floor/wood,/area/awaymission/wwmines)
-"gn" = (/obj/effect/critter/creature,/turf/simulated/floor/grass,/area/awaymission/wwgov)
+"gn" = (/mob/living/simple_animal/hostile/creature,/turf/simulated/floor/grass,/area/awaymission/wwgov)
"go" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/grass,/area/awaymission/wwgov)
"gp" = (/obj/effect/decal/cleanable/blood/splatter,/obj/effect/forcefield{desc = "You can't get in. Heh."; layer = 1; name = "Blocker"},/turf/simulated/mineral,/area/awaymission/wwmines)
"gq" = (/obj/effect/decal/cleanable/blood/gibs/up,/turf/simulated/floor/wood,/area/awaymission/wwmines)
diff --git a/maps/tgstation.2.0.9.dmm b/maps/tgstation.2.0.9.dmm
index dd85008c40..7a7433e5cb 100644
--- a/maps/tgstation.2.0.9.dmm
+++ b/maps/tgstation.2.0.9.dmm
@@ -7165,9 +7165,9 @@
"cHO" = (/obj/structure/table/woodentable,/obj/item/weapon/spacecash,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
"cHP" = (/obj/structure/rack,/obj/item/clothing/suit/wizrobe/red,/obj/item/clothing/shoes/sandal,/obj/item/clothing/head/wizard/red,/obj/item/weapon/staff,/turf/unsimulated/floor{icon_state = "grimy"},/area/wizard_station)
"cHQ" = (/obj/structure/rack,/obj/item/clothing/suit/wizrobe/magusred,/obj/item/clothing/head/wizard/magus,/obj/item/weapon/staff,/turf/unsimulated/floor{icon_state = "grimy"},/area/wizard_station)
-"cHR" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
-"cHS" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
-"cHT" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
+"cHR" = (/turf/unsimulated/wall/fakeglass{tag = "icon-fakewindows (WEST)"; icon_state = "fakewindows"; dir = 8},/area/wizard_station)
+"cHS" = (/turf/unsimulated/wall/fakeglass{tag = "icon-fakewindows2 (WEST)"; icon_state = "fakewindows2"; dir = 8},/area/wizard_station)
+"cHT" = (/turf/unsimulated/wall/fakeglass{tag = "icon-fakewindows (NORTHEAST)"; icon_state = "fakewindows"; dir = 5},/area/wizard_station)
"cHU" = (/obj/item/trash/raisins,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
"cHV" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
"cHW" = (/obj/effect/showcase,/turf/unsimulated/floor{dir = 1; icon_state = "chapel"},/area/wizard_station)
@@ -7176,16 +7176,16 @@
"cHZ" = (/obj/effect/showcase,/obj/effect/decal/cleanable/cobweb2,/turf/unsimulated/floor{dir = 4; icon_state = "chapel"},/area/wizard_station)
"cIa" = (/obj/effect/decal/remains/human,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/wizard_station)
"cIb" = (/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/wizard_station)
-"cIc" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
+"cIc" = (/turf/unsimulated/wall/fakeglass{tag = "icon-fakewindows2 (NORTH)"; icon_state = "fakewindows2"; dir = 1},/area/wizard_station)
"cId" = (/turf/unsimulated/floor{dir = 8; icon_state = "chapel"},/area/wizard_station)
"cIe" = (/obj/effect/decal/cleanable/blood,/turf/unsimulated/floor{icon_state = "chapel"},/area/wizard_station)
"cIf" = (/mob/living/carbon/monkey,/turf/unsimulated/floor{dir = 8; icon_state = "chapel"},/area/wizard_station)
"cIg" = (/turf/unsimulated/floor{icon_state = "chapel"},/area/wizard_station)
-"cIh" = (/obj/effect/critter/creature{name = "Experiment 35b"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/wizard_station)
+"cIh" = (/mob/living/simple_animal/hostile/creature{name = "Experiment 35b"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/wizard_station)
"cIi" = (/turf/unsimulated/floor{dir = 1; icon_state = "chapel"},/area/wizard_station)
"cIj" = (/turf/unsimulated/floor{dir = 4; icon_state = "chapel"},/area/wizard_station)
"cIk" = (/obj/effect/decal/cleanable/molten_item,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/wizard_station)
-"cIl" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
+"cIl" = (/turf/unsimulated/wall/fakeglass,/area/wizard_station)
"cIm" = (/obj/item/trash/chips,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
"cIn" = (/obj/structure/rack,/obj/item/weapon/kitchenknife/ritual,/turf/unsimulated/floor{dir = 8; icon_state = "chapel"},/area/wizard_station)
"cIo" = (/obj/effect/decal/cleanable/blood,/turf/unsimulated/floor{dir = 8; icon_state = "chapel"},/area/wizard_station)
diff --git a/tgstation.dme b/tgstation.dme
index 17d7359f13..5483657b33 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -112,7 +112,6 @@
#define FILE_DIR "code/modules/clothing/suits"
#define FILE_DIR "code/modules/clothing/under"
#define FILE_DIR "code/modules/clothing/under/jobs"
-#define FILE_DIR "code/modules/critters"
#define FILE_DIR "code/modules/detectivework"
#define FILE_DIR "code/modules/flufftext"
#define FILE_DIR "code/modules/food"
@@ -211,7 +210,9 @@
#define FILE_DIR "icons/vending_icons"
#define FILE_DIR "interface"
#define FILE_DIR "maps"
+#define FILE_DIR "maps/backup"
#define FILE_DIR "maps/RandomZLevels"
+#define FILE_DIR "maps/RandomZLevels/backup"
#define FILE_DIR "music"
#define FILE_DIR "music/interface"
#define FILE_DIR "sound"
@@ -938,10 +939,6 @@
#include "code\modules\clothing\under\jobs\engineering.dm"
#include "code\modules\clothing\under\jobs\medsci.dm"
#include "code\modules\clothing\under\jobs\security.dm"
-#include "code\modules\critters\critter.dm"
-#include "code\modules\critters\critter_AI.dm"
-#include "code\modules\critters\critter_defenses.dm"
-#include "code\modules\critters\critters.dm"
#include "code\modules\detectivework\detective_work.dm"
#include "code\modules\detectivework\evidence.dm"
#include "code\modules\detectivework\footprints_and_rag.dm"
@@ -1123,12 +1120,14 @@
#include "code\modules\mob\living\simple_animal\friendly\cat.dm"
#include "code\modules\mob\living\simple_animal\friendly\corgi.dm"
#include "code\modules\mob\living\simple_animal\friendly\crab.dm"
+#include "code\modules\mob\living\simple_animal\friendly\lizard.dm"
#include "code\modules\mob\living\simple_animal\friendly\mouse.dm"
#include "code\modules\mob\living\simple_animal\friendly\mushroom.dm"
#include "code\modules\mob\living\simple_animal\friendly\tomato.dm"
#include "code\modules\mob\living\simple_animal\hostile\alien.dm"
#include "code\modules\mob\living\simple_animal\hostile\bear.dm"
#include "code\modules\mob\living\simple_animal\hostile\carp.dm"
+#include "code\modules\mob\living\simple_animal\hostile\creature.dm"
#include "code\modules\mob\living\simple_animal\hostile\faithless.dm"
#include "code\modules\mob\living\simple_animal\hostile\hivebot.dm"
#include "code\modules\mob\living\simple_animal\hostile\hostile.dm"