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"