diff --git a/code/defines/obj/hydro.dm b/code/defines/obj/hydro.dm index bb53686d280..eb881a4fd28 100644 --- a/code/defines/obj/hydro.dm +++ b/code/defines/obj/hydro.dm @@ -1459,7 +1459,7 @@ /obj/item/weapon/reagent_containers/food/snacks/grown/killertomato/attack_self(mob/user as mob) if(istype(user.loc,/turf/space)) return - new /obj/effect/critter/killertomato(user.loc) + new /mob/living/simple_animal/tomato(user.loc) del(src) user << "You plant the killer-tomato." @@ -1654,7 +1654,7 @@ /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/walkingmushroom/attack_self(mob/user as mob) if(istype(user.loc,/turf/space)) return - new /obj/effect/critter/walkingmushroom(user.loc) + new /mob/living/simple_animal/mushroom(user.loc) del(src) user << "You plant the walking mushroom." diff --git a/code/game/asteroid/artifacts.dm b/code/game/asteroid/artifacts.dm index 7f4fa0ff004..26284b8bb7c 100644 --- a/code/game/asteroid/artifacts.dm +++ b/code/game/asteroid/artifacts.dm @@ -5,7 +5,7 @@ var/global/list/space_surprises = list( /obj/item/clothing/mask/facehugger/angr /obj/item/weapon/pickaxe/silver =4, /obj/item/weapon/pickaxe/drill =4, /obj/item/weapon/pickaxe/jackhammer =4, - /obj/effect/critter/spesscarp/elite =3, + /mob/living/simple_animal/carp =3, /obj/item/weapon/pickaxe/diamond =3, /obj/item/weapon/pickaxe/diamonddrill =3, /obj/item/weapon/pickaxe/gold =3, diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm index 6a513ed43c0..56f0b772175 100644 --- a/code/game/gamemodes/events.dm +++ b/code/game/gamemodes/events.dm @@ -348,10 +348,7 @@ /proc/carp_migration() // -- Darem for(var/obj/effect/landmark/C in world) if(C.name == "carpspawn") - if(prob(99)) - new /obj/effect/critter/spesscarp(C.loc) - else - new /obj/effect/critter/spesscarp/elite(C.loc) + new /mob/living/simple_animal/carp(C.loc) //sleep(100) spawn(rand(300, 600)) //Delayed announcements to keep the crew on their toes. command_alert("Unknown biological entities have been detected near [station_name()], please stand-by.", "Lifesign Alert") diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm index 6e324961f92..affbcb3fbf6 100644 --- a/code/game/machinery/computer/HolodeckControl.dm +++ b/code/game/machinery/computer/HolodeckControl.dm @@ -293,7 +293,7 @@ for(var/obj/effect/decal/cleanable/blood/B in linkedholodeck) del(B) - for(var/obj/effect/critter/spesscarp/C in linkedholodeck) + for(var/mob/living/simple_animal/carp/C in linkedholodeck) del(C) holographic_items = A.copy_contents_to(linkedholodeck , 1) @@ -314,10 +314,7 @@ T.temperature = 5000 T.hotspot_expose(50000,50000,1) if(L.name=="Holocarp Spawn") - if(prob(90)) - new /obj/effect/critter/spesscarp(L.loc) - else - new /obj/effect/critter/spesscarp/elite(L.loc) + new /mob/living/simple_animal/carp(L.loc) /obj/machinery/computer/HolodeckControl/proc/emergencyShutdown() diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index 79d65dc5cb0..3d5b23a989a 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -7,7 +7,7 @@ var/id = null /obj/machinery/computer/teleporter/New() - src.id = text("[]", rand(1000, 9999)) + src.id = "[rand(1000, 9999)]" ..() return @@ -22,21 +22,22 @@ //Quickfix for hiding nuke disks and people getting to centcomm until I can get the attack_hand() stuff to incorperate this. for(var/obj/O in user.get_contents()) if(istype(O, /obj/item/weapon/disk/nuclear) || istype(O, /obj/item/device/radio/beacon) || istype(O, /obj/item/weapon/storage/backpack/holding)) - user << "\red Something you are carrying seems to be unable to pass through the portal. Better drop it if you want to go through." + user << "Something you are carrying seems to be unable to pass through the portal. Better drop it if you want to go through." return var/obj/S = null for(var/obj/effect/landmark/sloc in world) if (sloc.name != M.data) continue - if (locate(/mob) in sloc.loc) + if (locate(/mob/living) in sloc.loc) continue S = sloc break - if (!S) + if(!S) S = locate("landmark*[M.data]") // use old stype - if (istype(S, /obj/effect/landmark/) && istype(S.loc, /turf)) - usr.loc = S.loc + if(istype(S, /obj/effect/landmark/) && istype(S.loc, /turf)) + user.loc = S.loc + user.drop_item() del(I) return else @@ -46,12 +47,6 @@ /obj/machinery/computer/teleporter/attack_paw() src.attack_hand() -/obj/machinery/computer/teleporter/security/attackby(obj/item/weapon/W) - src.attack_hand() - -/obj/machinery/computer/teleporter/security/attack_paw() - src.attack_hand() - /obj/machinery/teleport/station/attack_ai() src.attack_hand() diff --git a/code/game/objects/grenades/spawnergrenade.dm b/code/game/objects/grenades/spawnergrenade.dm index 249b6a6f3cc..739b6562e53 100644 --- a/code/game/objects/grenades/spawnergrenade.dm +++ b/code/game/objects/grenades/spawnergrenade.dm @@ -47,12 +47,6 @@ /obj/item/weapon/grenade/spawnergrenade/spesscarp name = "carp delivery grenade" - spawner_type = /obj/effect/critter/spesscarp + spawner_type = /mob/living/simple_animal/carp deliveryamt = 5 - origin_tech = "materials=3;magnets=4;syndicate=4" - -/obj/item/weapon/grenade/spawnergrenade/elitespesscarp - name = "elite carp delivery grenade" - spawner_type = /obj/effect/critter/spesscarp/elite - deliveryamt = 2 - origin_tech = "materials=3;magnets=4;syndicate=4" + origin_tech = "materials=3;magnets=4;syndicate=4" \ No newline at end of file diff --git a/code/game/objects/items/weapons/grenades.dm b/code/game/objects/items/weapons/grenades.dm index 29280cdc3db..41c5ad27755 100644 --- a/code/game/objects/items/weapons/grenades.dm +++ b/code/game/objects/items/weapons/grenades.dm @@ -502,15 +502,6 @@ CRITTER GRENADE /obj/item/weapon/spawnergrenade/spesscarp name = "carp delivery grenade" - spawner_type = /obj/effect/critter/spesscarp + spawner_type = /mob/living/simple_animal/carp deliveryamt = 5 - origin_tech = "materials=3;magnets=4;syndicate=4" - -/obj/item/weapon/spawnergrenade/elitespesscarp - name = "elite carp delivery grenade" - spawner_type = /obj/effect/critter/spesscarp/elite - deliveryamt = 2 - origin_tech = "materials=3;magnets=4;syndicate=4" - - - + origin_tech = "materials=3;magnets=4;syndicate=4" \ No newline at end of file diff --git a/code/game/objects/storage/storage.dm b/code/game/objects/storage/storage.dm index da4ee2a8839..ac539a5ab1c 100644 --- a/code/game/objects/storage/storage.dm +++ b/code/game/objects/storage/storage.dm @@ -184,7 +184,7 @@ user << "\blue You put the [W] into [src]." else if (M in range(1)) //If someone is standing close enough, they can tell what it is... M.show_message(text("\blue [user] puts [W] into [src].")) - else if (W.w_class >= 3.0) //Otherwise they can only see large or normal items from a distance... + else if (W && W.w_class >= 3.0) //Otherwise they can only see large or normal items from a distance... M.show_message(text("\blue [user] puts [W] into [src].")) return diff --git a/code/modules/chemical/Chemistry-Tools.dm b/code/modules/chemical/Chemistry-Tools.dm index 91a1ed27eaf..63cc30de497 100644 --- a/code/modules/chemical/Chemistry-Tools.dm +++ b/code/modules/chemical/Chemistry-Tools.dm @@ -457,11 +457,12 @@ for(var/mob/living/carbon/M in D.loc) if(!istype(M,/mob/living/carbon)) continue if(M == user) continue - //Syring gune attack logging by Yvarov + //Syringe gun attack logging by Yvarov var/R - for(var/datum/reagent/A in D.reagents.reagent_list) - R += A.id + " (" - R += num2text(A.volume) + ")," + if(D.reagents) + for(var/datum/reagent/A in D.reagents.reagent_list) + R += A.id + " (" + R += num2text(A.volume) + ")," if (istype(M, /mob)) M.attack_log += "\[[time_stamp()]\] [user]/[user.ckey] shot [M]/[M.ckey] with a syringegun ([R])" user.attack_log += "\[[time_stamp()]\] [user]/[user.ckey] shot [M]/[M.ckey] with a syringegun ([R])" @@ -469,10 +470,11 @@ else M.attack_log += "\[[time_stamp()]\] UNKNOWN SUBJECT (No longer exists) shot [M]/[M.ckey] with a syringegun ([R])" log_attack("UNKNOWN shot [M] ([M.ckey]) with a syringegun ([R])") - D.reagents.trans_to(M, 15) + if(D.reagents) + D.reagents.trans_to(M, 15) M.take_organ_damage(5) for(var/mob/O in viewers(world.view, D)) - O.show_message(text("\red [] is hit by the syringe!", M.name), 1) + O.show_message("\red [M.name] is hit by the syringe!", 1) del(D) if(D) diff --git a/code/modules/critters/critters.dm b/code/modules/critters/critters.dm index 6c389d36259..d3538151b85 100644 --- a/code/modules/critters/critters.dm +++ b/code/modules/critters/critters.dm @@ -40,41 +40,6 @@ ..() del(src) - -/obj/effect/critter/killertomato - name = "killer tomato" - desc = "Oh shit, you're really fucked now." - icon_state = "killertomato" - health = 15 - max_health = 15 - aggressive = 1 - defensive = 0 - wanderer = 1 - atkcarbon = 1 - atksilicon = 1 - firevuln = 2 - brutevuln = 2 - - - Harvest(var/obj/item/weapon/W, var/mob/living/user) - if(..()) - var/success = 0 - if(istype(W, /obj/item/weapon/butch)) - new /obj/item/weapon/reagent_containers/food/snacks/tomatomeat(src) - success = 1 - if(istype(W, /obj/item/weapon/kitchenknife)) - new /obj/item/weapon/reagent_containers/food/snacks/tomatomeat(src) - new /obj/item/weapon/reagent_containers/food/snacks/tomatomeat(src) - success = 1 - if(success) - for(var/mob/O in viewers(src, null)) - O.show_message("\red [user.name] cuts apart the [src.name]!", 1) - del(src) - return 1 - return 0 - - - /obj/effect/critter/spore name = "plasma spore" desc = "A barely intelligent colony of organisms. Very volatile." @@ -147,105 +112,6 @@ -/obj/effect/critter/spesscarp - name = "Spess Carp" - desc = "A ferocious, fang-bearing creature that resembles a fish." - icon_state = "spesscarp" - health = 25 - max_health = 25 - aggressive = 1 - defensive = 1 - wanderer = 1 - atkcarbon = 1 - atksilicon = 1 - atkcritter = 1 - atkmech = 1 - firevuln = 2 - brutevuln = 1 - melee_damage_lower = 5 - melee_damage_upper = 15 - angertext = "lunges" - attacktext = "bites" - attack_sound = 'bite.ogg' - attack_speed = 10 - var/stunchance = 10 // chance to tackle things down - - - - Harvest(var/obj/item/weapon/W, var/mob/living/user) - if(..()) - var/success = 0 - if(istype(W, /obj/item/weapon/butch)) - new/obj/item/weapon/reagent_containers/food/snacks/carpmeat(src.loc) - new/obj/item/weapon/reagent_containers/food/snacks/carpmeat(src.loc) - success = 1 - if(istype(W, /obj/item/weapon/kitchenknife)) - new/obj/item/weapon/reagent_containers/food/snacks/carpmeat(src.loc) - success = 1 - if(success) - for(var/mob/O in viewers(src, null)) - O.show_message("\red [user.name] cuts apart the [src.name]!", 1) - del(src) - return 1 - return 0 - - AfterAttack(var/mob/living/target) - if(prob(stunchance)) - if(target.weakened <= 0) - target.Weaken(rand(10, 15)) - for(var/mob/O in viewers(src, null)) - O.show_message("\red [src] knocks down [target]!", 1) - playsound(loc, 'pierce.ogg', 25, 1, -1) - - - -/obj/effect/critter/spesscarp/elite - desc = "Oh shit, you're really fucked now. It has an evil gleam in its eye." - health = 50 - max_health = 50 - melee_damage_lower = 20 - melee_damage_upper = 35 - stunchance = 15 - attack_speed = 7 -// opensdoors = 1 would give all access dono if want - - - -/obj/effect/critter/walkingmushroom - name = "Walking Mushroom" - desc = "A...huge...mushroom...with legs!?" - icon_state = "walkingmushroom" - health = 15 - max_health = 15 - aggressive = 0 - defensive = 0 - wanderer = 1 - atkcarbon = 0 - atksilicon = 0 - firevuln = 2 - brutevuln = 1 - wanderspeed = 1 - - - Harvest(var/obj/item/weapon/W, var/mob/living/user) - if(..()) - var/success = 0 - if(istype(W, /obj/item/weapon/butch)) - new /obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice(src.loc) - new /obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice(src.loc) - success = 1 - if(istype(W, /obj/item/weapon/kitchenknife)) - new /obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice(src.loc) - success = 1 - if(success) - for(var/mob/O in viewers(src, null)) - O.show_message("\red [user.name] cuts apart the [src.name]!", 1) - del(src) - return 1 - return 0 - - - /obj/effect/critter/lizard name = "Lizard" desc = "A cute tiny lizard." diff --git a/code/modules/mob/living/simple_animal/bear.dm b/code/modules/mob/living/simple_animal/bear.dm index d9c3494d4c9..6b0fb8363e2 100644 --- a/code/modules/mob/living/simple_animal/bear.dm +++ b/code/modules/mob/living/simple_animal/bear.dm @@ -2,16 +2,16 @@ #define BEAR_STANCE_ALERT 2 #define BEAR_STANCE_ATTACK 3 #define BEAR_STANCE_ATTACKING 4 -#define BEAR_STANCE_TIRED 4 +#define BEAR_STANCE_TIRED 5 //Space bears! /mob/living/simple_animal/bear name = "space bear" desc = "RawrRawr!!" - icon = 'icons/mob/mob.dmi' - icon_state = "bearspace" - icon_living = "bearspace" - icon_dead = "bear_d" + icon_state = "bear" + icon_living = "bear" + icon_dead = "bear_dead" + icon_gib = "bear_gib" speak = list("RAWR!","Rawr!","GRR!","Growl!") speak_emote = list("growls", "roars") emote_hear = list("rawrs","grumbles","grawls") @@ -25,6 +25,7 @@ response_harm = "pokes the" stop_automated_movement_when_pulled = 0 + maxHealth = 60 health = 60 //Space bears aren't affected by atmos. @@ -53,8 +54,8 @@ ..() if(!stat) - if( loc && istype(loc,/turf/space) ) - icon_state = "bearspace" + if(loc && istype(loc,/turf/space)) + icon_state = "bear" else icon_state = "bearfloor" @@ -111,12 +112,12 @@ stance = BEAR_STANCE_ALERT stance_step = 5 //Make it very alert, so it quickly attacks again if a mob returns return - if( !(target_mob in viewers(7,src)) ) + if(!(target_mob in viewers(7,src))) stance = BEAR_STANCE_ALERT stance_step = 5 //Make it very alert, so it quickly attacks again if a mob returns target_mob = null return - if( get_dist(src, target_mob) <= 1 ) //Attacking + if(get_dist(src, target_mob) <= 1) //Attacking emote( pick( list("slashes at [target_mob]", "bites [target_mob]") ) ) var/damage = rand(20,30) @@ -130,7 +131,7 @@ var/mob/living/L = target_mob L.adjustBruteLoss(damage) - if( stance_step >= 20 ) //attacks for 20 ticks, then it gets tired and needs to rest + if(stance_step >= 20) //attacks for 20 ticks, then it gets tired and needs to rest emote( "is worn out and needs to rest" ) stance = BEAR_STANCE_TIRED stance_step = 0 @@ -160,5 +161,5 @@ target_mob = M ..() -/mob/living/simple_animal/bear/Process_Spacemove(var/check_drift = 0) +/mob/living/simple_animal/carp/Process_Spacemove(var/check_drift = 0) return //No drifting in space for space bears! \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/carp.dm b/code/modules/mob/living/simple_animal/carp.dm new file mode 100644 index 00000000000..993c173f6fe --- /dev/null +++ b/code/modules/mob/living/simple_animal/carp.dm @@ -0,0 +1,93 @@ +#define CARP_STANCE_IDLE 1 +#define CARP_STANCE_ATTACK 2 +#define CARP_STANCE_ATTACKING 3 + +/mob/living/simple_animal/carp + name = "space carp" + desc = "A ferocious, fang-bearing creature that resembles a fish." + icon_state = "carp" + icon_living = "carp" + icon_dead = "carp_dead" + icon_gib = "carp_gib" + speak_chance = 0 + turns_per_move = 5 + meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat + response_help = "pets the" + response_disarm = "gently pushes aside the" + response_harm = "hits the" + + stop_automated_movement_when_pulled = 0 + maxHealth = 25 + health = 25 + + harm_intent_damage = 8 + melee_damage_lower = 5 + melee_damage_upper = 15 + attacktext = "bites" + attack_sound = 'bite.ogg' + + //Space carp aren't affected by atmos. + 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/stance = CARP_STANCE_IDLE //Used to determine behavior + var/stance_step = 0 //Used to delay checks depending on what stance the bear is in + var/mob/living/target_mob //Once the bear enters attack stance, it will try to chase this mob. This it to prevent it changing it's mind between multiple mobs. + +/mob/living/simple_animal/carp/Life() + ..() + + if(!stat) + switch(stance) + if(CARP_STANCE_IDLE) + stop_automated_movement = 0 + stance_step++ + if(stance_step > 5) + stance_step = 0 + for( var/mob/living/L in viewers(7,src) ) + if(iscarp(L)) continue + if(!L.stat) + emote("gnashes at [L]") + stance = CARP_STANCE_ATTACK + target_mob = L + break + + if(CARP_STANCE_ATTACK) //This one should only be active for one tick + stop_automated_movement = 1 + if(!target_mob || target_mob.stat) + stance = CARP_STANCE_IDLE + stance_step = 5 //Make it very alert, so it quickly attacks again if a mob returns + if(target_mob in viewers(7,src)) + walk_to(src, target_mob, 1, 3) + stance = CARP_STANCE_ATTACKING + stance_step = 0 + + if(CARP_STANCE_ATTACKING) + stop_automated_movement = 1 + stance_step++ + if(!target_mob || target_mob.stat) + stance = CARP_STANCE_IDLE + stance_step = 3 //Make it very alert, so it quickly attacks again if a mob returns + target_mob = null + return + if(!(target_mob in viewers(7,src))) + stance = CARP_STANCE_IDLE + stance_step = 1 + target_mob = null + return + if(get_dist(src, target_mob) <= 1) //Attacking + if(isliving(target_mob)) + var/mob/living/L = target_mob + L.attack_animal(src) + if(prob(10)) + L.Weaken(5) + L.visible_message("\the [src] knocks down \the [L]!") + +/mob/living/simple_animal/carp/Process_Spacemove(var/check_drift = 0) + return //No drifting in space for space carp! //original comments do not steal \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/cat.dm b/code/modules/mob/living/simple_animal/cat.dm index ccb4459f4d9..db4d6f96f78 100644 --- a/code/modules/mob/living/simple_animal/cat.dm +++ b/code/modules/mob/living/simple_animal/cat.dm @@ -2,7 +2,6 @@ /mob/living/simple_animal/cat name = "cat" desc = "Kitty!!" - icon = 'icons/mob/mob.dmi' icon_state = "cat" icon_living = "cat" icon_dead = "cat_dead" @@ -35,7 +34,7 @@ for(var/mob/living/simple_animal/mouse/M in view(1,src)) if(!M.stat) M.splat() - emote("SPLATS \the [M]") + emote("splats \the [M]") movement_target = null stop_automated_movement = 0 break diff --git a/code/modules/mob/living/simple_animal/corgi.dm b/code/modules/mob/living/simple_animal/corgi.dm index c1e949c8cd6..0c4173301a5 100644 --- a/code/modules/mob/living/simple_animal/corgi.dm +++ b/code/modules/mob/living/simple_animal/corgi.dm @@ -3,7 +3,6 @@ name = "\improper corgi" real_name = "corgi" desc = "It's a corgi." - icon = 'icons/mob/mob.dmi' icon_state = "corgi" icon_living = "corgi" icon_dead = "corgi_dead" diff --git a/code/modules/mob/living/simple_animal/crab.dm b/code/modules/mob/living/simple_animal/crab.dm index 5fb148df7cd..caba557fd71 100644 --- a/code/modules/mob/living/simple_animal/crab.dm +++ b/code/modules/mob/living/simple_animal/crab.dm @@ -1,9 +1,7 @@ //Look Sir, free crabs! /mob/living/simple_animal/crab name = "crab" - real_name = "crab" desc = "Free crabs!" - icon = 'icons/mob/mob.dmi' icon_state = "crab" icon_living = "crab" icon_dead = "crab_dead" diff --git a/code/modules/mob/living/simple_animal/life.dm b/code/modules/mob/living/simple_animal/life.dm index 2fd5572e188..6a02b9e0031 100644 --- a/code/modules/mob/living/simple_animal/life.dm +++ b/code/modules/mob/living/simple_animal/life.dm @@ -1,12 +1,14 @@ /mob/living/simple_animal name = "animal" + icon = 'icons/mob/animal.dmi' var/icon_living = "" var/icon_dead = "" + var/icon_gib = null //We only try to show a gibbing animation if this exists. maxHealth = 20 var/list/speak = list() var/list/speak_emote = list()// Emotes while speaking IE: Ian [emote], [text] -- Ian barks, "WOOF!". Spoken text is generated from the speak variable. var/speak_chance = 0 - var/list/emote_hear = list() //EHearable emotes + var/list/emote_hear = list() //Hearable emotes var/list/emote_see = list() //Unlike speak_emote, the list of things in this variable only show by themselves with no spoken text. IE: Ian barks, Ian yaps health = 20 var/turns_per_move = 1 @@ -232,6 +234,8 @@ ..() /mob/living/simple_animal/gib() + if(icon_gib) + flick(icon_gib, src) if(meat_amount && meat_type) for(var/i = 0; i < meat_amount; i++) new meat_type(src.loc) @@ -272,13 +276,13 @@ switch(M.a_intent) - if ("help") + if("help") if (health > 0) for(var/mob/O in viewers(src, null)) if ((O.client && !( O.blinded ))) O.show_message("\blue [M] [response_help] [src]") - if ("grab") + if("grab") if (M == src) return if (nopush) @@ -297,13 +301,13 @@ if ((O.client && !( O.blinded ))) O.show_message(text("\red [] has grabbed [] passively!", M, src), 1) - if ("hurt") + if("hurt") health -= harm_intent_damage for(var/mob/O in viewers(src, null)) if ((O.client && !( O.blinded ))) O.show_message("\red [M] [response_harm] [src]") - if ("disarm") + if("disarm") for(var/mob/O in viewers(src, null)) if ((O.client && !( O.blinded ))) O.show_message("\blue [M] [response_disarm] [src]") @@ -325,6 +329,13 @@ M.show_message("\blue [user] applies the [MED] on [src]") else user << "\blue this [src] is dead, medical items won't bring it back to life." + if(meat_type && (stat == DEAD)) //if the animal has a meat, and if it is dead. + if(istype(O, /obj/item/weapon/kitchenknife) || istype(O, /obj/item/weapon/butch)) + new meat_type (get_turf(src)) + if(prob(95)) + del(src) + return + gib() else if(O.force) health -= O.force diff --git a/code/modules/mob/living/simple_animal/mouse.dm b/code/modules/mob/living/simple_animal/mouse.dm index 96d0876d637..5cc26f8d754 100644 --- a/code/modules/mob/living/simple_animal/mouse.dm +++ b/code/modules/mob/living/simple_animal/mouse.dm @@ -1,8 +1,6 @@ -//Mouse /mob/living/simple_animal/mouse name = "mouse" desc = "It's a nasty, ugly, evil, disease-ridden rodent." - icon = 'icons/mob/mob.dmi' icon_state = "mouse_gray" icon_living = "mouse_gray" icon_dead = "mouse_gray_dead" diff --git a/code/modules/mob/living/simple_animal/mushroom.dm b/code/modules/mob/living/simple_animal/mushroom.dm new file mode 100644 index 00000000000..7db01ad6f9e --- /dev/null +++ b/code/modules/mob/living/simple_animal/mushroom.dm @@ -0,0 +1,14 @@ +/mob/living/simple_animal/mushroom + name = "walking mushroom" + desc = "It's a massive mushroom... with legs?" + icon_state = "mushroom" + icon_living = "mushroom" + icon_dead = "mushroom_dead" + speak_chance = 0 + turns_per_move = 1 + health = 5 + meat_type = /obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice + response_help = "pets the" + response_disarm = "gently pushes aside the" + response_harm = "whacks the" + harm_intent_damage = 5 \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/tomato.dm b/code/modules/mob/living/simple_animal/tomato.dm new file mode 100644 index 00000000000..a22dc47fabe --- /dev/null +++ b/code/modules/mob/living/simple_animal/tomato.dm @@ -0,0 +1,16 @@ +/mob/living/simple_animal/tomato + name = "tomato" + desc = "It's a horrifyingly enormous beef tomato, and it's packing extra beef!" + icon_state = "tomato" + icon_living = "tomato" + icon_dead = "tomato_dead" + speak_chance = 0 + turns_per_move = 5 + health = 15 + meat_type = /obj/item/weapon/reagent_containers/food/snacks/tomatomeat + 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 diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 20cbc191e20..eeb3e68c38d 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -70,6 +70,11 @@ return 1 return 0 +/proc/iscarp(A) + if(istype(A, /mob/living/simple_animal/carp)) + return 1 + return 0 + /proc/isAI(A) if(istype(A, /mob/living/silicon/ai)) return 1 diff --git a/icons/mob/animal.dmi b/icons/mob/animal.dmi new file mode 100644 index 00000000000..b713ca36de2 Binary files /dev/null and b/icons/mob/animal.dmi differ diff --git a/icons/mob/critter.dmi b/icons/mob/critter.dmi index 67b8bac8a10..d0f3f886f45 100644 Binary files a/icons/mob/critter.dmi and b/icons/mob/critter.dmi differ diff --git a/icons/mob/mob.dmi b/icons/mob/mob.dmi index 56bbd9e7d6b..01bb11f9839 100644 Binary files a/icons/mob/mob.dmi and b/icons/mob/mob.dmi differ diff --git a/icons/obj/machines/gateway.dmi b/icons/obj/machines/gateway.dmi index 06bf9f8f715..36887c2be0e 100644 Binary files a/icons/obj/machines/gateway.dmi and b/icons/obj/machines/gateway.dmi differ diff --git a/icons/turf/areas.dmi b/icons/turf/areas.dmi index e81baf2d28b..10492408de1 100644 Binary files a/icons/turf/areas.dmi and b/icons/turf/areas.dmi differ diff --git a/tgstation.dme b/tgstation.dme index 756773258cb..05ceaea53b6 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -5,205 +5,6 @@ // END_INTERNALS // BEGIN_FILE_DIR #define FILE_DIR . -#define FILE_DIR "code" -#define FILE_DIR "code/ATMOSPHERICS" -#define FILE_DIR "code/ATMOSPHERICS/components" -#define FILE_DIR "code/ATMOSPHERICS/components/binary_devices" -#define FILE_DIR "code/ATMOSPHERICS/components/trinary_devices" -#define FILE_DIR "code/ATMOSPHERICS/components/unary" -#define FILE_DIR "code/datums" -#define FILE_DIR "code/datums/diseases" -#define FILE_DIR "code/datums/helper_datums" -#define FILE_DIR "code/datums/spells" -#define FILE_DIR "code/defines" -#define FILE_DIR "code/defines/area" -#define FILE_DIR "code/defines/mob" -#define FILE_DIR "code/defines/mob/dead" -#define FILE_DIR "code/defines/mob/living" -#define FILE_DIR "code/defines/mob/living/carbon" -#define FILE_DIR "code/defines/mob/living/silicon" -#define FILE_DIR "code/defines/obj" -#define FILE_DIR "code/defines/procs" -#define FILE_DIR "code/defines/tanning" -#define FILE_DIR "code/FEA" -#define FILE_DIR "code/game" -#define FILE_DIR "code/game/area" -#define FILE_DIR "code/game/asteroid" -#define FILE_DIR "code/game/gamemodes" -#define FILE_DIR "code/game/gamemodes/blob" -#define FILE_DIR "code/game/gamemodes/blob/blobs" -#define FILE_DIR "code/game/gamemodes/changeling" -#define FILE_DIR "code/game/gamemodes/cult" -#define FILE_DIR "code/game/gamemodes/events" -#define FILE_DIR "code/game/gamemodes/events/holidays" -#define FILE_DIR "code/game/gamemodes/extended" -#define FILE_DIR "code/game/gamemodes/malfunction" -#define FILE_DIR "code/game/gamemodes/meteor" -#define FILE_DIR "code/game/gamemodes/nuclear" -#define FILE_DIR "code/game/gamemodes/revolution" -#define FILE_DIR "code/game/gamemodes/sandbox" -#define FILE_DIR "code/game/gamemodes/traitor" -#define FILE_DIR "code/game/gamemodes/wizard" -#define FILE_DIR "code/game/jobs" -#define FILE_DIR "code/game/jobs/job" -#define FILE_DIR "code/game/machinery" -#define FILE_DIR "code/game/machinery/atmoalter" -#define FILE_DIR "code/game/machinery/bots" -#define FILE_DIR "code/game/machinery/computer" -#define FILE_DIR "code/game/machinery/doors" -#define FILE_DIR "code/game/machinery/embedded_controller" -#define FILE_DIR "code/game/machinery/kitchen" -#define FILE_DIR "code/game/machinery/pipe" -#define FILE_DIR "code/game/machinery/telecomms" -#define FILE_DIR "code/game/magic" -#define FILE_DIR "code/game/magic/cultist" -#define FILE_DIR "code/game/mecha" -#define FILE_DIR "code/game/mecha/combat" -#define FILE_DIR "code/game/mecha/equipment" -#define FILE_DIR "code/game/mecha/equipment/tools" -#define FILE_DIR "code/game/mecha/equipment/weapons" -#define FILE_DIR "code/game/mecha/medical" -#define FILE_DIR "code/game/mecha/working" -#define FILE_DIR "code/game/objects" -#define FILE_DIR "code/game/objects/alien" -#define FILE_DIR "code/game/objects/closets" -#define FILE_DIR "code/game/objects/closets/secure" -#define FILE_DIR "code/game/objects/devices" -#define FILE_DIR "code/game/objects/devices/PDA" -#define FILE_DIR "code/game/objects/grenades" -#define FILE_DIR "code/game/objects/items" -#define FILE_DIR "code/game/objects/items/weapons" -#define FILE_DIR "code/game/objects/items/weapons/implants" -#define FILE_DIR "code/game/objects/radio" -#define FILE_DIR "code/game/objects/secstorage" -#define FILE_DIR "code/game/objects/stacks" -#define FILE_DIR "code/game/objects/storage" -#define FILE_DIR "code/game/objects/tanks" -#define FILE_DIR "code/game/vehicles" -#define FILE_DIR "code/game/vehicles/airtight" -#define FILE_DIR "code/game/verbs" -#define FILE_DIR "code/js" -#define FILE_DIR "code/modules" -#define FILE_DIR "code/modules/admin" -#define FILE_DIR "code/modules/admin/DB ban" -#define FILE_DIR "code/modules/admin/verbs" -#define FILE_DIR "code/modules/assembly" -#define FILE_DIR "code/modules/chemical" -#define FILE_DIR "code/modules/client" -#define FILE_DIR "code/modules/clothing" -#define FILE_DIR "code/modules/clothing/glasses" -#define FILE_DIR "code/modules/clothing/gloves" -#define FILE_DIR "code/modules/clothing/head" -#define FILE_DIR "code/modules/clothing/masks" -#define FILE_DIR "code/modules/clothing/shoes" -#define FILE_DIR "code/modules/clothing/spacesuits" -#define FILE_DIR "code/modules/clothing/suits" -#define FILE_DIR "code/modules/clothing/under" -#define FILE_DIR "code/modules/clothing/uniforms" -#define FILE_DIR "code/modules/critters" -#define FILE_DIR "code/modules/critters/hivebots" -#define FILE_DIR "code/modules/detectivework" -#define FILE_DIR "code/modules/flufftext" -#define FILE_DIR "code/modules/food" -#define FILE_DIR "code/modules/maps" -#define FILE_DIR "code/modules/mining" -#define FILE_DIR "code/modules/mob" -#define FILE_DIR "code/modules/mob/dead" -#define FILE_DIR "code/modules/mob/dead/observer" -#define FILE_DIR "code/modules/mob/living" -#define FILE_DIR "code/modules/mob/living/blob" -#define FILE_DIR "code/modules/mob/living/carbon" -#define FILE_DIR "code/modules/mob/living/carbon/alien" -#define FILE_DIR "code/modules/mob/living/carbon/alien/humanoid" -#define FILE_DIR "code/modules/mob/living/carbon/alien/humanoid/caste" -#define FILE_DIR "code/modules/mob/living/carbon/alien/larva" -#define FILE_DIR "code/modules/mob/living/carbon/brain" -#define FILE_DIR "code/modules/mob/living/carbon/human" -#define FILE_DIR "code/modules/mob/living/carbon/metroid" -#define FILE_DIR "code/modules/mob/living/carbon/monkey" -#define FILE_DIR "code/modules/mob/living/silicon" -#define FILE_DIR "code/modules/mob/living/silicon/ai" -#define FILE_DIR "code/modules/mob/living/silicon/decoy" -#define FILE_DIR "code/modules/mob/living/silicon/pai" -#define FILE_DIR "code/modules/mob/living/silicon/robot" -#define FILE_DIR "code/modules/mob/living/simple_animal" -#define FILE_DIR "code/modules/mob/new_player" -#define FILE_DIR "code/modules/mob/organ" -#define FILE_DIR "code/modules/paperwork" -#define FILE_DIR "code/modules/power" -#define FILE_DIR "code/modules/power/antimatter" -#define FILE_DIR "code/modules/power/singularity" -#define FILE_DIR "code/modules/power/singularity/particle_accelerator" -#define FILE_DIR "code/modules/projectiles" -#define FILE_DIR "code/modules/projectiles/ammunition" -#define FILE_DIR "code/modules/projectiles/guns" -#define FILE_DIR "code/modules/projectiles/guns/energy" -#define FILE_DIR "code/modules/projectiles/guns/projectile" -#define FILE_DIR "code/modules/projectiles/projectile" -#define FILE_DIR "code/modules/recycling" -#define FILE_DIR "code/modules/research" -#define FILE_DIR "code/modules/scripting" -#define FILE_DIR "code/modules/scripting/AST" -#define FILE_DIR "code/modules/scripting/AST/Operators" -#define FILE_DIR "code/modules/scripting/Implementations" -#define FILE_DIR "code/modules/scripting/Interpreter" -#define FILE_DIR "code/modules/scripting/Parser" -#define FILE_DIR "code/modules/scripting/Scanner" -#define FILE_DIR "code/modules/security levels" -#define FILE_DIR "code/unused" -#define FILE_DIR "code/unused/beast" -#define FILE_DIR "code/unused/computer2" -#define FILE_DIR "code/unused/disease2" -#define FILE_DIR "code/unused/gamemodes" -#define FILE_DIR "code/unused/hivebot" -#define FILE_DIR "code/unused/mining" -#define FILE_DIR "code/unused/optics" -#define FILE_DIR "code/unused/pda2" -#define FILE_DIR "code/unused/powerarmor" -#define FILE_DIR "code/unused/spacecraft" -#define FILE_DIR "code/WorkInProgress" -#define FILE_DIR "code/WorkInProgress/carn" -#define FILE_DIR "code/WorkInProgress/mapload" -#define FILE_DIR "code/WorkInProgress/organs" -#define FILE_DIR "code/WorkInProgress/virus2" -#define FILE_DIR "html" -#define FILE_DIR "icons" -#define FILE_DIR "icons/48x48" -#define FILE_DIR "icons/effects" -#define FILE_DIR "icons/mecha" -#define FILE_DIR "icons/misc" -#define FILE_DIR "icons/mob" -#define FILE_DIR "icons/obj" -#define FILE_DIR "icons/obj/assemblies" -#define FILE_DIR "icons/obj/atmospherics" -#define FILE_DIR "icons/obj/clothing" -#define FILE_DIR "icons/obj/doors" -#define FILE_DIR "icons/obj/machines" -#define FILE_DIR "icons/obj/pipes" -#define FILE_DIR "icons/pda_icons" -#define FILE_DIR "icons/spideros_icons" -#define FILE_DIR "icons/Testing" -#define FILE_DIR "icons/turf" -#define FILE_DIR "icons/unused" -#define FILE_DIR "icons/vehicles" -#define FILE_DIR "icons/vending_icons" -#define FILE_DIR "interface" -#define FILE_DIR "maps" -#define FILE_DIR "maps/RandomZLevels" -#define FILE_DIR "sound" -#define FILE_DIR "sound/AI" -#define FILE_DIR "sound/ambience" -#define FILE_DIR "sound/effects" -#define FILE_DIR "sound/hallucinations" -#define FILE_DIR "sound/items" -#define FILE_DIR "sound/machines" -#define FILE_DIR "sound/mecha" -#define FILE_DIR "sound/misc" -#define FILE_DIR "sound/piano" -#define FILE_DIR "sound/voice" -#define FILE_DIR "sound/weapons" -#define FILE_DIR "tools" -#define FILE_DIR "tools/Redirector" // END_FILE_DIR // BEGIN_PREFERENCES @@ -1050,14 +851,17 @@ #include "code\modules\mob\living\silicon\robot\wires.dm" #include "code\modules\mob\living\simple_animal\bear.dm" #include "code\modules\mob\living\simple_animal\behemoth.dm" +#include "code\modules\mob\living\simple_animal\carp.dm" #include "code\modules\mob\living\simple_animal\cat.dm" #include "code\modules\mob\living\simple_animal\constructs.dm" #include "code\modules\mob\living\simple_animal\corgi.dm" #include "code\modules\mob\living\simple_animal\crab.dm" #include "code\modules\mob\living\simple_animal\life.dm" #include "code\modules\mob\living\simple_animal\mouse.dm" +#include "code\modules\mob\living\simple_animal\mushroom.dm" #include "code\modules\mob\living\simple_animal\parrot.dm" #include "code\modules\mob\living\simple_animal\shade.dm" +#include "code\modules\mob\living\simple_animal\tomato.dm" #include "code\modules\mob\living\simple_animal\update_icons.dm" #include "code\modules\mob\living\simple_animal\worm.dm" #include "code\modules\mob\new_player\hud.dm"