diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 3b9a3eb0671..efa08d5a1ab 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -3562,7 +3562,7 @@ "bqz" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/wood,/area/crew_quarters/captain) "bqA" = (/obj/structure/stool/bed/chair,/turf/simulated/floor/wood,/area/crew_quarters/captain) "bqB" = (/turf/simulated/floor/carpet,/area/crew_quarters/captain) -"bqC" = (/mob/living/simple_animal/fox/Renault,/turf/simulated/floor/carpet,/area/crew_quarters/captain) +"bqC" = (/mob/living/simple_animal/pet/fox/Renault,/turf/simulated/floor/carpet,/area/crew_quarters/captain) "bqD" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/carpet,/area/crew_quarters/captain) "bqE" = (/obj/structure/table/woodentable,/obj/machinery/camera{c_tag = "Captain's Office"; dir = 8; network = list("SS13")},/obj/item/weapon/storage/lockbox/medal,/turf/simulated/floor/wood,/area/crew_quarters/captain) "bqF" = (/obj/structure/disposalpipe/segment,/obj/machinery/power/apc{cell_type = 5000; dir = 8; name = "Central Hall East APC"; pixel_x = -24; pixel_y = 0},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/hallway/primary/central/east) @@ -4021,7 +4021,7 @@ "bzq" = (/obj/machinery/mecha_part_fabricator,/obj/effect/decal/warning_stripes/north,/turf/simulated/floor,/area/assembly/robotics) "bzr" = (/obj/machinery/mecha_part_fabricator,/obj/effect/decal/warning_stripes/northeast,/turf/simulated/floor,/area/assembly/robotics) "bzs" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics) -"bzt" = (/mob/living/simple_animal/corgi/Ian/borgi,/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics) +"bzt" = (/mob/living/simple_animal/pet/corgi/Ian/borgi,/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics) "bzu" = (/obj/machinery/ai_status_display{pixel_x = 32; pixel_y = 0},/obj/structure/table,/obj/item/device/flash/synthetic,/obj/item/device/flash/synthetic,/obj/item/device/flash/synthetic,/obj/item/device/flash/synthetic,/obj/item/device/flash/synthetic,/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics) "bzv" = (/obj/structure/closet/firecloset,/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 8; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/medical/research{name = "Research Division"}) "bzw" = (/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) @@ -4339,7 +4339,7 @@ "bFw" = (/obj/machinery/computer/card,/turf/simulated/floor{icon_state = "blue"; dir = 10},/area/crew_quarters/heads) "bFx" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor,/area/crew_quarters/heads) "bFy" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/carpet,/area/crew_quarters/heads) -"bFz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/mob/living/simple_animal/corgi/Ian,/turf/simulated/floor/carpet,/area/crew_quarters/heads) +"bFz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/mob/living/simple_animal/pet/corgi/Ian,/turf/simulated/floor/carpet,/area/crew_quarters/heads) "bFA" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/crew_quarters/heads) "bFB" = (/obj/structure/table,/obj/item/weapon/paper,/obj/item/weapon/pen,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 8; name = "Gravity Generator APC"; pixel_x = -24},/turf/simulated/floor,/area/engine/gravitygenerator) "bFC" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/engine/gravitygenerator) @@ -5101,7 +5101,7 @@ "bUe" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/structure/disposalpipe/segment,/turf/simulated/floor{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/medical/cmo) "bUf" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/cmo) "bUg" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/cmo) -"bUh" = (/obj/machinery/power/apc{dir = 4; name = "CMO Office APC"; pixel_x = 25},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/mob/living/simple_animal/cat/Runtime,/turf/simulated/floor{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/medical/cmo) +"bUh" = (/obj/machinery/power/apc{dir = 4; name = "CMO Office APC"; pixel_x = 25},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/mob/living/simple_animal/pet/cat/Runtime,/turf/simulated/floor{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/medical/cmo) "bUi" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/medical/medbay2) "bUj" = (/turf/simulated/wall,/area/medical/medbreak) "bUk" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/machinery/light{dir = 1; on = 1},/obj/machinery/door_control{id = "staffroom"; name = "Staff Room Privacy Shutters Control"; pixel_x = -25; pixel_y = 0},/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/medical/medbreak) diff --git a/_maps/map_files/cyberiad/z2.dmm b/_maps/map_files/cyberiad/z2.dmm index 43eaa37cc76..8c41e8e8626 100644 --- a/_maps/map_files/cyberiad/z2.dmm +++ b/_maps/map_files/cyberiad/z2.dmm @@ -780,7 +780,7 @@ "oZ" = (/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/obj/structure/flora/grass/brown,/turf/unsimulated/floor{tag = "icon-gravsnow_corner (EAST)"; icon = 'icons/turf/snow.dmi'; icon_state = "gravsnow_corner"; dir = 4},/area/syndicate_mothership) "pa" = (/obj/structure/noticeboard{pixel_x = -32},/obj/item/weapon/paper/syndimemo,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership) "pb" = (/obj/structure/stool{pixel_y = 8},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership) -"pc" = (/mob/living/simple_animal/fox/Syndifox,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership) +"pc" = (/mob/living/simple_animal/pet/fox/Syndifox,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership) "pd" = (/obj/effect/decal/warning_stripes/southeastcorner,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership) "pe" = (/obj/effect/decal/warning_stripes/south,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership) "pf" = (/obj/machinery/door/airlock/centcom{name = "Study"; opacity = 1; req_access_txt = "150"},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership) diff --git a/_maps/map_files/cyberiad/z8.dmm b/_maps/map_files/cyberiad/z8.dmm index 5bb901489ad..41fe6d642c8 100644 --- a/_maps/map_files/cyberiad/z8.dmm +++ b/_maps/map_files/cyberiad/z8.dmm @@ -211,7 +211,7 @@ "ec" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 5},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/traitor/tox) "ed" = (/obj/machinery/atmospherics/pipe/tank/oxygen{dir = 8; volume = 20000},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/traitor/tox) "ee" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/grille,/turf/simulated/floor/plating,/area/traitor/tox) -"ef" = (/mob/living/simple_animal/cat/Syndi,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/traitor/hall) +"ef" = (/mob/living/simple_animal/pet/cat/Syndi,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/traitor/hall) "eg" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/traitor/hall) "eh" = (/obj/machinery/light,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/traitor/tox) "ei" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/turf/simulated/floor/plating,/area/traitor/hall) @@ -622,3 +622,4 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} + diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 5d5b7588355..a0ca40d98ca 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -1416,7 +1416,7 @@ datum/mind ..() mind.assigned_role = "Animal" -/mob/living/simple_animal/corgi/mind_initialize() +/mob/living/simple_animal/pet/corgi/mind_initialize() ..() mind.assigned_role = "Corgi" diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index d7dfd29644d..13ca2508078 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -857,24 +857,28 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine name = "Corgi Crate" cost = 50 containertype = /obj/structure/closet/critter/corgi + contains = list(/obj/item/clothing/accessory/petcollar) containername = "corgi crate" /datum/supply_packs/organic/cat name = "Cat Crate" cost = 50 //Cats are worth as much as corgis. containertype = /obj/structure/closet/critter/cat + contains = list(/obj/item/clothing/accessory/petcollar) containername = "cat crate" /datum/supply_packs/organic/pug name = "Pug Crate" cost = 50 containertype = /obj/structure/closet/critter/pug + contains = list(/obj/item/clothing/accessory/petcollar) containername = "pug crate" /datum/supply_packs/organic/fox name = "Fox Crate" cost = 55 //Foxes are cool. containertype = /obj/structure/closet/critter/fox + contains = list(/obj/item/clothing/accessory/petcollar) containername = "fox crate" /datum/supply_packs/organic/butterfly diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm index ed0383660a9..80fc51c35ae 100644 --- a/code/game/gamemodes/events.dm +++ b/code/game/gamemodes/events.dm @@ -101,7 +101,10 @@ /proc/carp_migration() // -- Darem for(var/obj/effect/landmark/C in landmarks_list) if(C.name == "carpspawn") - new /mob/living/simple_animal/hostile/carp(C.loc) + if(prob(95)) + new /mob/living/simple_animal/hostile/carp(C.loc) + else + new /mob/living/simple_animal/hostile/carp/megacarp(C.loc) //sleep(100) spawn(rand(300, 600)) //Delayed announcements to keep the crew on their toes. command_announcement.Announce("Unknown biological entities have been detected near [station_name()], please stand-by.", "Lifesign Alert", new_sound = 'sound/AI/commandreport.ogg') diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index c472711e159..bf18a7e5111 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -1216,7 +1216,7 @@ /obj/item/clothing/accessory/scarf/purple=1,/obj/item/clothing/accessory/scarf/yellow=1,/obj/item/clothing/accessory/scarf/orange=1, /obj/item/clothing/accessory/scarf/lightblue=1,/obj/item/clothing/accessory/scarf/white=1,/obj/item/clothing/accessory/scarf/black=1, /obj/item/clothing/accessory/scarf/zebra=1,/obj/item/clothing/accessory/scarf/christmas=1,/obj/item/clothing/accessory/stripedredscarf=1, - /obj/item/clothing/accessory/stripedbluescarf=1,/obj/item/clothing/accessory/stripedgreenscarf=1,/obj/item/clothing/accessory/waistcoat=1, + /obj/item/clothing/accessory/stripedbluescarf=1,/obj/item/clothing/accessory/stripedgreenscarf=1,/obj/item/clothing/accessory/petcollar =3,/obj/item/clothing/accessory/waistcoat=1, /obj/item/clothing/under/sundress=2,/obj/item/clothing/under/stripeddress = 1, /obj/item/clothing/under/sailordress = 1, /obj/item/clothing/under/redeveninggown = 1, /obj/item/clothing/under/blacktango=1,/obj/item/clothing/suit/jacket=3, /obj/item/clothing/glasses/regular=2,/obj/item/clothing/head/sombrero=1,/obj/item/clothing/suit/poncho=1, /obj/item/clothing/suit/ianshirt=1,/obj/item/clothing/shoes/laceup=2,/obj/item/clothing/shoes/black=4, diff --git a/code/game/objects/items/random_items.dm b/code/game/objects/items/random_items.dm index d5f13d33c47..1d63ff3e972 100644 --- a/code/game/objects/items/random_items.dm +++ b/code/game/objects/items/random_items.dm @@ -301,12 +301,12 @@ attackby(obj/item/weapon/W as obj, mob/user as mob, params) if(istype(W, /obj/item/weapon/crowbar)) - var/mob/living/simple_animal/cat/Cat1 = new(loc) + var/mob/living/simple_animal/pet/cat/Cat1 = new(loc) Cat1.apply_damage(250)//,TOX) Cat1.name = "Schrodinger's Cat" Cat1.desc = "It seems it's been dead for a while." - var/mob/living/simple_animal/cat/Cat2 = new(loc) + var/mob/living/simple_animal/pet/cat/Cat2 = new(loc) Cat2.name = "Schrodinger's Cat" Cat2.desc = "It's was alive the whole time!" sleep(2) diff --git a/code/game/objects/items/weapons/grenades.dm b/code/game/objects/items/weapons/grenades.dm index 5a1c01584a5..43acc8df89b 100644 --- a/code/game/objects/items/weapons/grenades.dm +++ b/code/game/objects/items/weapons/grenades.dm @@ -389,7 +389,7 @@ /obj/item/weapon/grenade/clusterbuster/fluffy name = "Fluffy Love Bomb" desc = "Exactly as snuggly as it sounds." - payload = /mob/living/simple_animal/corgi/puppy + payload = /mob/living/simple_animal/pet/corgi/puppy /obj/item/weapon/grenade/clusterbuster/prime() var/numspawned = rand(4,8) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index 58cf919b1e7..983b4dc6042 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -53,6 +53,7 @@ new /obj/item/clothing/suit/armor/vest(src) new /obj/item/weapon/gun/energy/gun(src) new /obj/item/device/flash(src) + new /obj/item/clothing/accessory/petcollar(src) return /obj/structure/closet/secure_closet/hop2 diff --git a/code/game/objects/structures/crates_lockers/crittercrate.dm b/code/game/objects/structures/crates_lockers/crittercrate.dm index cdbdacde644..0b9fa2a6425 100644 --- a/code/game/objects/structures/crates_lockers/crittercrate.dm +++ b/code/game/objects/structures/crates_lockers/crittercrate.dm @@ -42,11 +42,11 @@ /obj/structure/closet/critter/corgi name = "corgi crate" - content_mob = /mob/living/simple_animal/corgi + content_mob = /mob/living/simple_animal/pet/corgi /obj/structure/closet/critter/corgi/New() if(prob(50)) - content_mob = /mob/living/simple_animal/corgi/Lisa + content_mob = /mob/living/simple_animal/pet/corgi/Lisa ..() /obj/structure/closet/critter/cow @@ -67,20 +67,20 @@ /obj/structure/closet/critter/cat name = "cat crate" - content_mob = /mob/living/simple_animal/cat + content_mob = /mob/living/simple_animal/pet/cat /obj/structure/closet/critter/cat/New() if(prob(50)) - content_mob = /mob/living/simple_animal/cat/Proc + content_mob = /mob/living/simple_animal/pet/cat/Proc ..() /obj/structure/closet/critter/pug name = "pug crate" - content_mob = /mob/living/simple_animal/pug + content_mob = /mob/living/simple_animal/pet/pug /obj/structure/closet/critter/fox name = "fox crate" - content_mob = /mob/living/simple_animal/fox + content_mob = /mob/living/simple_animal/pet/fox /obj/structure/closet/critter/butterfly name = "butterflies crate" diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm index 6d2a5be7a11..4c1a4c8ab88 100644 --- a/code/game/objects/structures/crates_lockers/largecrate.dm +++ b/code/game/objects/structures/crates_lockers/largecrate.dm @@ -55,7 +55,7 @@ /obj/structure/largecrate/lisa/attackby(obj/item/weapon/W as obj, mob/user as mob) //ugly but oh well if(istype(W, /obj/item/weapon/crowbar)) - new /mob/living/simple_animal/corgi/Lisa(loc) + new /mob/living/simple_animal/pet/corgi/Lisa(loc) ..() /obj/structure/largecrate/cow @@ -93,5 +93,5 @@ /obj/structure/largecrate/cat/attackby(obj/item/weapon/W as obj, mob/user as mob, params) if(istype(W, /obj/item/weapon/crowbar)) - new /mob/living/simple_animal/cat(loc) + new /mob/living/simple_animal/pet/cat(loc) ..() \ No newline at end of file diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 28b855046e3..ec3362fa23b 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -308,10 +308,10 @@ if("slime") M.change_mob_type( /mob/living/carbon/slime , null, null, delmob, 1 ) if("monkey") M.change_mob_type( /mob/living/carbon/human/monkey , null, null, delmob, 1 ) if("robot") M.change_mob_type( /mob/living/silicon/robot , null, null, delmob, 1 ) - if("cat") M.change_mob_type( /mob/living/simple_animal/cat , null, null, delmob, 1 ) - if("runtime") M.change_mob_type( /mob/living/simple_animal/cat/Runtime , null, null, delmob, 1 ) - if("corgi") M.change_mob_type( /mob/living/simple_animal/corgi , null, null, delmob, 1 ) - if("ian") M.change_mob_type( /mob/living/simple_animal/corgi/Ian , null, null, delmob, 1 ) + if("cat") M.change_mob_type( /mob/living/simple_animal/pet/cat , null, null, delmob, 1 ) + if("runtime") M.change_mob_type( /mob/living/simple_animal/pet/cat/Runtime , null, null, delmob, 1 ) + if("corgi") M.change_mob_type( /mob/living/simple_animal/pet/corgi , null, null, delmob, 1 ) + if("ian") M.change_mob_type( /mob/living/simple_animal/pet/corgi/Ian , null, null, delmob, 1 ) if("crab") M.change_mob_type( /mob/living/simple_animal/crab , null, null, delmob, 1 ) if("coffee") M.change_mob_type( /mob/living/simple_animal/crab/Coffee , null, null, delmob, 1 ) if("parrot") M.change_mob_type( /mob/living/simple_animal/parrot , null, null, delmob, 1 ) diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm index ee6800f4c18..055e7e0dc65 100644 --- a/code/modules/clothing/under/accessories/accessory.dm +++ b/code/modules/clothing/under/accessories/accessory.dm @@ -53,7 +53,7 @@ name = "red tie" icon_state = "redtie" _color = "redtie" - + /obj/item/clothing/accessory/black name = "black tie" icon_state = "blacktie" @@ -64,7 +64,7 @@ desc = "A neosilk clip-on tie. This one is disgusting." icon_state = "horribletie" _color = "horribletie" - + /obj/item/clothing/accessory/waistcoat // No overlay name = "waistcoat" desc = "For some classy, murderous fun." @@ -208,7 +208,7 @@ user << "[src] rejects your insufficient access rights." return ..() - + /obj/item/clothing/accessory/holobadge/emag_act(user as mob) if (emagged) user << "\red [src] is already cracked." @@ -234,7 +234,7 @@ new /obj/item/clothing/accessory/holobadge/cord(src) ..() return - + /////////// //SCARVES// @@ -317,3 +317,12 @@ icon_state = "stripedbluescarf" _color = "stripedbluescarf" +/obj/item/clothing/accessory/petcollar + name = "pet collar" + icon_state = "petcollar" + _color = "petcollar" + var/tagname = null + +/obj/item/clothing/accessory/petcollar/attack_self(mob/user as mob) + tagname = copytext(sanitize(input(user, "Would you like to change the name on the tag?", "Name your new pet", "Spot") as null|text),1,MAX_NAME_LEN) + name = "[initial(name)] - [tagname]" \ No newline at end of file diff --git a/code/modules/events/carp_migration.dm b/code/modules/events/carp_migration.dm index 303f5686e8e..06098e5e34f 100644 --- a/code/modules/events/carp_migration.dm +++ b/code/modules/events/carp_migration.dm @@ -13,7 +13,10 @@ /datum/event/carp_migration/start() for(var/obj/effect/landmark/C in landmarks_list) if(C.name == "carpspawn") - spawned_carp.Add(new /mob/living/simple_animal/hostile/carp(C.loc)) + if(prob(95)) + new /mob/living/simple_animal/hostile/carp(C.loc) + else + new /mob/living/simple_animal/hostile/carp/megacarp(C.loc) /datum/event/carp_migration/end() for(var/mob/living/simple_animal/hostile/carp/C in spawned_carp) diff --git a/code/modules/holiday/christmas.dm b/code/modules/holiday/christmas.dm index 9636a1681f6..5a98288a1cd 100644 --- a/code/modules/holiday/christmas.dm +++ b/code/modules/holiday/christmas.dm @@ -4,7 +4,7 @@ for(var/turf/simulated/floor/T in orange(1,xmas)) for(var/i=1,i<=rand(1,5),i++) new /obj/item/weapon/a_gift(T) - for(var/mob/living/simple_animal/corgi/Ian/Ian in mob_list) + for(var/mob/living/simple_animal/pet/corgi/Ian/Ian in mob_list) Ian.place_on_head(new /obj/item/clothing/head/helmet/space/santahat(Ian)) /datum/holiday/xmas/handle_event() diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm index 813c226858f..d039311fe53 100644 --- a/code/modules/mob/living/carbon/alien/special/facehugger.dm +++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm @@ -146,9 +146,10 @@ var/const/MAX_ACTIVE_TIME = 400 if(!sterile) L.Paralyse(MAX_IMPREGNATION_TIME/6) //something like 25 ticks = 20 seconds with the default settings else if (iscorgi(M)) - var/mob/living/simple_animal/corgi/C = M + var/mob/living/simple_animal/pet/corgi/C = M loc = C C.facehugger = src + C.regenerate_icons() GoIdle() //so it doesn't jump the people that tear it off @@ -184,7 +185,7 @@ var/const/MAX_ACTIVE_TIME = 400 if(iscorgi(target)) - var/mob/living/simple_animal/corgi/C = target + var/mob/living/simple_animal/pet/corgi/C = target src.loc = get_turf(C) C.facehugger = null else diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index 684896e7d77..75b82f1e9e7 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -9,7 +9,7 @@ response_disarm = "flails at" response_harm = "punches" icon_dead = "shade_dead" - speed = -1 + speed = 0 a_intent = "harm" stop_automated_movement = 1 status_flags = CANPUSH @@ -24,6 +24,7 @@ max_n2 = 0 minbodytemp = 0 faction = list("cult") + flying = 1 var/list/construct_spells = list() /mob/living/simple_animal/construct/New() @@ -40,7 +41,7 @@ if((M.client && !( M.blinded ))) M.show_message("\red [src] collapses in a shattered heap. ") ghostize() - del src + qdel(src) return /mob/living/simple_animal/construct/examine() @@ -221,7 +222,7 @@ melee_damage_lower = 25 melee_damage_upper = 25 attacktext = "slashes" - speed = -1 + speed = 0 see_in_dark = 7 attack_sound = 'sound/weapons/bladeslice.ogg' construct_spells = list(/obj/effect/proc_holder/spell/wizard/targeted/ethereal_jaunt/shift) diff --git a/code/modules/mob/living/simple_animal/friendly/butterfly.dm b/code/modules/mob/living/simple_animal/friendly/butterfly.dm index 4c4841a77e9..d55f2897f3b 100644 --- a/code/modules/mob/living/simple_animal/friendly/butterfly.dm +++ b/code/modules/mob/living/simple_animal/friendly/butterfly.dm @@ -14,7 +14,9 @@ health = 2 harm_intent_damage = 1 friendly = "nudges" - pass_flags = PASSTABLE + density = 0 + pass_flags = PASSTABLE | PASSGRILLE | PASSMOB + ventcrawler = 2 /mob/living/simple_animal/butterfly/New() ..() diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index 902508c4bb8..c0633fec3a3 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -1,5 +1,5 @@ //Cat -/mob/living/simple_animal/cat +/mob/living/simple_animal/pet/cat name = "cat" desc = "Kitty!!" icon_state = "cat2" @@ -13,8 +13,8 @@ speak_chance = 1 turns_per_move = 5 see_in_dark = 6 - simplespecies = /mob/living/simple_animal/cat - childtype = /mob/living/simple_animal/cat/kitten + simplespecies = /mob/living/simple_animal/pet/cat + childtype = /mob/living/simple_animal/pet/cat/kitten meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat meat_amount = 3 response_help = "pets" @@ -22,7 +22,7 @@ response_harm = "kicks" //RUNTIME IS ALIVE! SQUEEEEEEEE~ -/mob/living/simple_animal/cat/Runtime +/mob/living/simple_animal/pet/cat/Runtime name = "Runtime" desc = "GCAT" icon_state = "cat" @@ -32,14 +32,14 @@ var/turns_since_scan = 0 var/mob/living/simple_animal/mouse/movement_target -/mob/living/simple_animal/cat/Runtime/Life() +/mob/living/simple_animal/pet/cat/Runtime/Life() //MICE! if((src.loc) && isturf(src.loc)) if(!stat && !resting && !buckled) for(var/mob/living/simple_animal/mouse/M in view(1,src)) - if(!M.stat) + if(!M.stat && Adjacent(M)) + emote("me", 1, "splats \the [M]!") M.splat() - emote("splats \the [M]") movement_target = null stop_automated_movement = 0 break @@ -67,18 +67,20 @@ stop_automated_movement = 1 walk_to(src,movement_target,0,3) -/mob/living/simple_animal/cat/Proc +/mob/living/simple_animal/pet/cat/Proc name = "Proc" -/mob/living/simple_animal/cat/kitten +/mob/living/simple_animal/pet/cat/kitten name = "kitten" desc = "D'aaawwww" icon_state = "kitten" icon_living = "kitten" icon_dead = "kitten_dead" gender = NEUTER + density = 0 + pass_flags = PASSMOB -/mob/living/simple_animal/cat/Syndi +/mob/living/simple_animal/pet/cat/Syndi name = "SyndiCat" desc = "It's a SyndiCat droid." icon_state = "Syndicat" diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm index 7d5f290fc55..b2e0408b7e4 100644 --- a/code/modules/mob/living/simple_animal/friendly/corgi.dm +++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm @@ -1,12 +1,12 @@ //Corgi -/mob/living/simple_animal/corgi +/mob/living/simple_animal/pet/corgi name = "\improper corgi" real_name = "corgi" desc = "It's a corgi." - gender = MALE icon_state = "corgi" icon_living = "corgi" icon_dead = "corgi_dead" + gender = MALE health = 30 maxHealth = 30 speak = list("YAP", "Woof!", "Bark!", "AUUUUUU") @@ -17,21 +17,22 @@ turns_per_move = 10 meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/corgi meat_amount = 3 - response_help = "pets the" - response_disarm = "bops the" - response_harm = "kicks the" + response_help = "pets" + response_disarm = "bops" + response_harm = "kicks" see_in_dark = 5 - childtype = /mob/living/simple_animal/corgi/puppy - simplespecies = /mob/living/simple_animal/corgi + childtype = /mob/living/simple_animal/pet/corgi/puppy + simplespecies = /mob/living/simple_animal/pet/corgi + var/shaved = 0 var/obj/item/inventory_head var/obj/item/inventory_back var/facehugger -/mob/living/simple_animal/corgi/New() +/mob/living/simple_animal/pet/corgi/New() ..() regenerate_icons() -/mob/living/simple_animal/corgi/Life() +/mob/living/simple_animal/pet/corgi/Life() . = ..() if(.) if(fire) @@ -59,19 +60,19 @@ if(0) healths.icon_state = "health7" regenerate_icons() -/mob/living/simple_animal/corgi/Die() +/mob/living/simple_animal/pet/corgi/Die() ..() regenerate_icons() -/mob/living/simple_animal/corgi/revive() +/mob/living/simple_animal/pet/corgi/revive() ..() regenerate_icons() -/mob/living/simple_animal/corgi/show_inv(mob/user as mob) +/mob/living/simple_animal/pet/corgi/show_inv(mob/user as mob) user.set_machine(src) if(user.stat) return - var/dat = "
" + var/dat = "
"
if(inventory_head)
dat += "
Head: [inventory_head] (Remove)"
else
@@ -81,28 +82,43 @@
else
dat += "
Back: Nothing"
- user << browse(dat, text("window=mob[];size=325x500", name))
+ user << browse(dat, text("window=mob[];size=325x500", real_name))
onclose(user, "mob[real_name]")
return
-/mob/living/simple_animal/corgi/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
+/mob/living/simple_animal/pet/corgi/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
if(inventory_head && inventory_back)
//helmet and armor = 100% protection
if( istype(inventory_head,/obj/item/clothing/head/helmet) && istype(inventory_back,/obj/item/clothing/suit/armor) )
if( O.force )
- usr << "\red This animal is wearing too much armor. You can't cause /him any damage."
- for (var/mob/M in viewers(src, null))
- M.show_message("\red \b [user] hits [src] with the [O], however [src] is too armored.")
+ user << "[src] is wearing too much armor! You can't cause \him any damage."
+ visible_message(" [user] hits [src] with [O], however [src] is too armored.")
else
- usr << "\red This animal is wearing too much armor. You can't reach its skin."
- for (var/mob/M in viewers(src, null))
- M.show_message("\red [user] gently taps [src] with the [O]. ")
- if(prob(15))
- emote("looks at [user] with [pick("an amused","an annoyed","a confused","a resentful", "a happy", "an excited")] expression on \his face")
+ user << "[src] is wearing too much armor! You can't reach \his skin."
+ visible_message("[user] gently taps [src] with [O].")
+ if(health>0 && prob(15))
+ emote("me", 1, "looks at [user] with [pick("an amused","an annoyed","a confused","a resentful", "a happy", "an excited")] expression.")
return
+
+ if (istype(O, /obj/item/weapon/razor))
+ if (shaved)
+ user << "You can't shave this corgi, it's already been shaved!"
+ return
+ user.visible_message("[user] starts to shave [src] using \the [O].", "You start to shave [src] using \the [O]...")
+ if(do_after(user, 50))
+ user.visible_message("[user] shaves [src]'s hair using \the [O].")
+ playsound(loc, 'sound/items/Welder2.ogg', 20, 1)
+ shaved = 1
+ icon_living = "[initial(icon_living)]_shaved"
+ icon_dead = "[initial(icon_living)]_shaved_dead"
+ if(stat == CONSCIOUS)
+ icon_state = icon_living
+ else
+ icon_state = icon_dead
+ return
..()
-/mob/living/simple_animal/corgi/Topic(href, href_list)
+/mob/living/simple_animal/pet/corgi/Topic(href, href_list)
if(usr.stat) return
//Removing from inventory
@@ -125,7 +141,7 @@
inventory_head = null
regenerate_icons()
else
- usr << "\red There is nothing to remove from its [remove_from]."
+ usr << "There is nothing to remove from its [remove_from]."
return
if("back")
if(inventory_back)
@@ -133,97 +149,59 @@
inventory_back = null
regenerate_icons()
else
- usr << "\red There is nothing to remove from its [remove_from]."
+ usr << "There is nothing to remove from its [remove_from]."
return
- show_inv(usr) //Commented out because changing Ian's name and then calling up his inventory opens a new inventory...which is annoying.
+ show_inv(usr)
//Adding things to inventory
else if(href_list["add_inv"])
if(!Adjacent(usr) || !(ishuman(usr) || isrobot(usr) || isalienadult(usr)))
return
+
var/add_to = href_list["add_inv"]
- if(!usr.get_active_hand())
- usr << "\red You have nothing in your hand to put on its [add_to]."
- return
+
switch(add_to)
if("head")
- if(inventory_head)
- usr << "\red It's is already wearing something."
- return
- else
- place_on_head(usr.get_active_hand())
-
- var/obj/item/item_to_add = usr.get_active_hand()
- if(!item_to_add)
- return
-
- //Corgis are supposed to be simpler, so only a select few objects can actually be put
- //to be compatible with them. The objects are below.
- //Many hats added, Some will probably be removed, just want to see which ones are popular.
-
- var/list/allowed_types = list(
- /obj/item/clothing/head/helmet,
- /obj/item/clothing/glasses/sunglasses,
- /obj/item/clothing/head/caphat,
- /obj/item/clothing/head/collectable/captain,
- /obj/item/clothing/head/that,
- /obj/item/clothing/head/that,
- /obj/item/clothing/head/kitty,
- /obj/item/clothing/head/collectable/kitty,
- /obj/item/clothing/head/rabbitears,
- /obj/item/clothing/head/collectable/rabbitears,
- /obj/item/clothing/head/beret,
- /obj/item/clothing/head/collectable/beret,
- /obj/item/clothing/head/det_hat,
- /obj/item/clothing/head/nursehat,
- /obj/item/clothing/head/pirate,
- /obj/item/clothing/head/collectable/pirate,
- /obj/item/clothing/head/ushanka,
- /obj/item/clothing/head/chefhat,
- /obj/item/clothing/head/collectable/chef,
- /obj/item/clothing/head/collectable/police,
- /obj/item/clothing/head/wizard/fake,
- /obj/item/clothing/head/wizard,
- /obj/item/clothing/head/collectable/wizard,
- /obj/item/clothing/head/hardhat,
- /obj/item/clothing/head/collectable/hardhat,
- /obj/item/clothing/head/hardhat/white,
- /obj/item/weapon/bedsheet,
- /obj/item/clothing/head/helmet/space/santahat,
- /obj/item/clothing/head/collectable/paper,
- /obj/item/clothing/head/soft,
- /obj/item/clothing/head/hardhat/reindeer
- )
-
- if( ! ( item_to_add.type in allowed_types ) )
- usr << "\red It doesn't seem too keen on wearing that item."
- return
-
- usr.drop_item()
-
- place_on_head(item_to_add)
- regenerate_icons()
+ place_on_head(usr.get_active_hand(),usr)
if("back")
if(inventory_back)
- usr << "\red It's already wearing something."
+ usr << "It's already wearing something!"
return
else
var/obj/item/item_to_add = usr.get_active_hand()
+
if(!item_to_add)
+ usr.visible_message("[usr] pets [src].","You rest your hand on [src]'s back for a moment.")
+ return
+ if(istype(item_to_add,/obj/item/weapon/c4)) // last thing he ever wears, I guess
+ item_to_add.afterattack(src,usr,1)
return
- //Corgis are supposed to be simpler, so only a select few objects can actually be put
- //to be compatible with them. The objects are below.
-
+ //The objects that corgis can wear on their backs.
var/list/allowed_types = list(
/obj/item/clothing/suit/armor/vest,
- /obj/item/device/radio
+ /obj/item/clothing/suit/space/deathsquad,
+ /obj/item/device/radio,
+ /obj/item/device/radio/off,
+ /obj/item/clothing/suit/cardborg,
+ /obj/item/weapon/tank/oxygen,
+ /obj/item/weapon/tank/air,
+ /obj/item/weapon/extinguisher,
)
if( ! ( item_to_add.type in allowed_types ) )
- usr << "\red This object won't fit."
+ usr << "You set [item_to_add] on [src]'s back, but \he shakes it off!"
+ if(!usr.drop_item())
+ usr << "\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s back!"
+ return
+ item_to_add.loc = loc
+ if(prob(25))
+ step_rand(item_to_add)
+ for(var/i in list(1,2,4,8,4,8,4,dir))
+ dir = i
+ sleep(1)
return
usr.drop_item()
@@ -231,83 +209,191 @@
src.inventory_back = item_to_add
regenerate_icons()
- show_inv(usr) //Commented out because changing Ian's name and then calling up his inventory opens a new inventory...which is annoying.
+ show_inv(usr)
else
..()
-/mob/living/simple_animal/corgi/proc/place_on_head(obj/item/item_to_add)
- item_to_add.loc = src
- src.inventory_head = item_to_add
- regenerate_icons()
+//Corgis are supposed to be simpler, so only a select few objects can actually be put
+//to be compatible with them. The objects are below.
+//Many hats added, Some will probably be removed, just want to see which ones are popular.
+/mob/living/simple_animal/pet/corgi/proc/place_on_head(obj/item/item_to_add, var/mob/user as mob)
- //Various hats and items (worn on his head) change Ian's behaviour. His attributes are reset when a HAT is removed.
- switch(inventory_head && inventory_head.type)
- if(/obj/item/clothing/head/caphat, /obj/item/clothing/head/collectable/captain)
- name = "Captain [real_name]"
- desc = "Probably better than the last captain."
- if(/obj/item/clothing/head/kitty, /obj/item/clothing/head/collectable/kitty)
- name = "Runtime"
- emote_see = list("coughs up a furball", "stretches")
- emote_hear = list("purrs")
- speak = list("Purrr", "Meow!", "MAOOOOOW!", "HISSSSS", "MEEEEEEW")
- desc = "It's a cute little kitty-cat! ... wait ... what the hell?"
- if(/obj/item/clothing/head/rabbitears, /obj/item/clothing/head/collectable/rabbitears)
- name = "Hoppy"
- emote_see = list("twitches its nose", "hops around a bit")
- desc = "This is hoppy. It's a corgi-...urmm... bunny rabbit"
- if(/obj/item/clothing/head/beret, /obj/item/clothing/head/collectable/beret)
- name = "Yann"
- desc = "Mon dieu! C'est un chien!"
- speak = list("le woof!", "le bark!", "JAPPE!!")
- emote_see = list("cowers in fear", "surrenders", "plays dead","looks as though there is a wall in front of him")
- if(/obj/item/clothing/head/det_hat)
- name = "Detective [real_name]"
- desc = "[name] sees through your lies..."
- emote_see = list("investigates the area","sniffs around for clues","searches for scooby snacks")
- if(/obj/item/clothing/head/nursehat)
- name = "Nurse [real_name]"
- desc = "[name] needs 100cc of beef jerky...STAT!"
- if(/obj/item/clothing/head/pirate, /obj/item/clothing/head/collectable/pirate)
- name = "[pick("Ol'","Scurvy","Black","Rum","Gammy","Bloody","Gangrene","Death","Long-John")] [pick("kibble","leg","beard","tooth","poop-deck","Threepwood","Le Chuck","corsair","Silver","Crusoe")]"
- desc = "Yaarghh!! Thar' be a scurvy dog!"
- emote_see = list("hunts for treasure","stares coldly...","gnashes his tiny corgi teeth")
- emote_hear = list("growls ferociously", "snarls")
- speak = list("Arrrrgh!!","Grrrrrr!")
- if(/obj/item/clothing/head/ushanka)
- name = "[pick("Comrade","Commissar","Glorious Leader")] [real_name]"
- desc = "A follower of Karl Barx."
- emote_see = list("contemplates the failings of the capitalist economic model", "ponders the pros and cons of vangaurdism")
- if(/obj/item/clothing/head/collectable/police)
- name = "Officer [real_name]"
- emote_see = list("drools","looks for donuts")
- desc = "Stop right there criminal scum!"
- if(/obj/item/clothing/head/wizard/fake, /obj/item/clothing/head/wizard, /obj/item/clothing/head/collectable/wizard)
- name = "Grandwizard [real_name]"
- speak = list("YAP", "Woof!", "Bark!", "AUUUUUU", "EI NATH!")
- if(/obj/item/weapon/bedsheet)
- name = "\improper Ghost"
- speak = list("WoooOOOooo~","AUUUUUUUUUUUUUUUUUU")
- emote_see = list("stumbles around", "shivers")
- emote_hear = list("howls","groans")
- desc = "Spooky!"
- if(/obj/item/clothing/head/helmet/space/santahat)
- name = "Santa's Corgi Helper"
- emote_hear = list("barks christmas songs", "yaps merrily")
- emote_see = list("looks for presents", "checks his list")
- desc = "He's very fond of milk and cookies."
- set_light(6)
- if(/obj/item/clothing/head/soft)
- name = "Corgi Tech [real_name]"
- desc = "The reason your yellow gloves have chew-marks."
- if(/obj/item/clothing/head/hardhat/reindeer)
- name = "[real_name] the red-nosed Corgi"
- emote_hear = list("lights the way", "illuminates", "yaps")
- desc = "He has a very shiny nose."
- set_light(1)
+ if(istype(item_to_add,/obj/item/weapon/c4)) // last thing he ever wears, I guess
+ item_to_add.afterattack(src,user,1)
+ return
+
+ if(inventory_head)
+ if(user) user << "You can't put more than one hat on [src]!"
+ return
+ if(!item_to_add)
+ user.visible_message("[user] pets [src].","You rest your hand on [src]'s head for a moment.")
+ return
+
+
+ var/valid = 0
+
+ //Various hats and items (worn on his head) change Ian's behaviour. His attributes are reset when a hat is removed.
+ if(istype(item_to_add, /obj/item/clothing/accessory/scarf))
+ valid = 1
+ else
+ switch(item_to_add.type)
+ if( /obj/item/clothing/glasses/sunglasses, /obj/item/clothing/head/that, /obj/item/clothing/head/collectable/paper,
+ /obj/item/clothing/head/hardhat, /obj/item/clothing/head/collectable/hardhat, /obj/item/clothing/head/hardhat/white,
+ /obj/item/weapon/paper)
+ valid = 1
+
+ if(/obj/item/clothing/head/helmet)
+ name = "Sergeant [real_name]"
+ desc = "The ever-loyal, the ever-vigilant."
+ valid = 1
+
+ if(/obj/item/clothing/head/chefhat, /obj/item/clothing/head/collectable/chef)
+ name = "Sous chef [real_name]"
+ desc = "Your food will be taste-tested. All of it."
+ valid = 1
+
+ if(/obj/item/clothing/head/caphat, /obj/item/clothing/head/collectable/captain)
+ name = "Captain [real_name]"
+ desc = "Probably better than the last captain."
+ valid = 1
+
+ if(/obj/item/clothing/head/kitty, /obj/item/clothing/head/collectable/kitty)
+ name = "Runtime"
+ emote_see = list("coughs up a furball", "stretches")
+ emote_hear = list("purrs")
+ speak = list("Purrr", "Meow!", "MAOOOOOW!", "HISSSSS", "MEEEEEEW")
+ desc = "It's a cute little kitty-cat! ... wait ... what the hell?"
+ valid = 1
+
+ if(/obj/item/clothing/head/rabbitears, /obj/item/clothing/head/collectable/rabbitears)
+ name = "Hoppy"
+ emote_see = list("twitches its nose", "hops around a bit")
+ desc = "This is Hoppy. It's a corgi-...urmm... bunny rabbit"
+ valid = 1
+
+ if(/obj/item/clothing/head/beret, /obj/item/clothing/head/collectable/beret)
+ name = "Yann"
+ desc = "Mon dieu! C'est un chien!"
+ speak = list("le woof!", "le bark!", "JAPPE!!")
+ emote_see = list("cowers in fear.", "surrenders.", "plays dead.","looks as though there is a wall in front of him.")
+ valid = 1
+
+ if(/obj/item/clothing/head/det_hat)
+ name = "Detective [real_name]"
+ desc = "[name] sees through your lies..."
+ emote_see = list("investigates the area.","sniffs around for clues.","searches for scooby snacks.")
+ valid = 1
+
+ if(/obj/item/clothing/head/nursehat)
+ name = "Nurse [real_name]"
+ desc = "[name] needs 100cc of beef jerky... STAT!"
+ valid = 1
+
+ if(/obj/item/clothing/head/pirate, /obj/item/clothing/head/collectable/pirate)
+ name = "[pick("Ol'","Scurvy","Black","Rum","Gammy","Bloody","Gangrene","Death","Long-John")] [pick("kibble","leg","beard","tooth","poop-deck","Threepwood","Le Chuck","corsair","Silver","Crusoe")]"
+ desc = "Yaarghh!! Thar' be a scurvy dog!"
+ emote_see = list("hunts for treasure.","stares coldly...","gnashes his tiny corgi teeth!")
+ emote_hear = list("growls ferociously!", "snarls.")
+ speak = list("Arrrrgh!!","Grrrrrr!")
+ valid = 1
+
+ if(/obj/item/clothing/head/ushanka)
+ name = "[pick("Comrade","Commissar","Glorious Leader")] [real_name]"
+ desc = "A follower of Karl Barx."
+ emote_see = list("contemplates the failings of the capitalist economic model.", "ponders the pros and cons of vanguardism.")
+ valid = 1
+
+ if(/obj/item/clothing/head/warden, /obj/item/clothing/head/collectable/police)
+ name = "Officer [real_name]"
+ emote_see = list("drools.","looks for donuts.")
+ desc = "Stop right there criminal scum!"
+ valid = 1
+
+ if(/obj/item/clothing/head/wizard/fake, /obj/item/clothing/head/wizard, /obj/item/clothing/head/collectable/wizard)
+ name = "Grandwizard [real_name]"
+ speak = list("YAP", "Woof!", "Bark!", "AUUUUUU", "EI NATH!")
+ valid = 1
+
+ if(/obj/item/clothing/head/cardborg)
+ name = "Borgi"
+ speak = list("Ping!","Beep!","Woof!")
+ emote_see = list("goes rogue.", "sniffs out non-humans.")
+ desc = "Result of robotics budget cuts."
+ valid = 1
+
+ if(/obj/item/weapon/bedsheet)
+ name = "\improper Ghost"
+ speak = list("WoooOOOooo~","AUUUUUUUUUUUUUUUUUU")
+ emote_see = list("stumbles around.", "shivers.")
+ emote_hear = list("howls!","groans.")
+ desc = "Spooky!"
+ valid = 1
+
+ if(/obj/item/clothing/head/helmet/space/santahat)
+ name = "Santa's Corgi Helper"
+ emote_hear = list("barks Christmas songs.", "yaps merrily!")
+ emote_see = list("looks for presents.", "checks his list.")
+ desc = "He's very fond of milk and cookies."
+ valid = 1
+
+ if(/obj/item/clothing/head/soft)
+ name = "Corgi Tech [real_name]"
+ desc = "The reason your yellow gloves have chew-marks."
+ valid = 1
+
+ if(/obj/item/clothing/head/hardhat/reindeer)
+ name = "[real_name] the red-nosed Corgi"
+ emote_hear = list("lights the way!", "illuminates.", "yaps!")
+ desc = "He has a very shiny nose."
+ set_light(1)
+ valid = 1
+
+ if(/obj/item/clothing/head/sombrero)
+ name = "Segnor [real_name]"
+ desc = "You must respect elder [real_name]"
+ valid = 1
+
+ if(/obj/item/clothing/head/hopcap)
+ name = "Lieutenant [real_name]"
+ desc = "Can actually be trusted to not run off on his own."
+ valid = 1
+
+ if(/obj/item/clothing/head/helmet/space/deathsquad)
+ name = "Trooper [real_name]"
+ desc = "That's not red paint. That's real corgi blood."
+ valid = 1
+
+ if(valid)
+ if(user && !user.drop_item())
+ user << "\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s head!"
+ return 0
+ if(health <= 0)
+ user << "There is merely a dull, lifeless look in [real_name]'s eyes as you put the [item_to_add] on \him."
+ else if(user)
+ user.visible_message("[user] puts [item_to_add] on [real_name]'s head. [src] looks at [user] and barks once.",
+ "You put [item_to_add] on [real_name]'s head. [src] gives you a peculiar look, then wags \his tail once and barks.",
+ "You hear a friendly-sounding bark.")
+ item_to_add.loc = src
+ src.inventory_head = item_to_add
+ regenerate_icons()
+
+ else
+ if(user && !user.drop_item())
+ user << "\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s head!"
+ return 0
+ user << "You set [item_to_add] on [src]'s head, but \he shakes it off!"
+ item_to_add.loc = loc
+ if(prob(25))
+ step_rand(item_to_add)
+ for(var/i in list(1,2,4,8,4,8,4,dir))
+ dir = i
+ sleep(1)
+
+ return valid
//IAN! SQUEEEEEEEEE~
-/mob/living/simple_animal/corgi/Ian
+/mob/living/simple_animal/pet/corgi/Ian
name = "Ian"
real_name = "Ian" //Intended to hold the name without altering it.
gender = MALE
@@ -318,7 +404,7 @@
response_disarm = "bops"
response_harm = "kicks"
-/mob/living/simple_animal/corgi/Ian/Life()
+/mob/living/simple_animal/pet/corgi/Ian/Life()
..()
//Feeding, chasing food, FOOOOODDDD
@@ -357,14 +443,17 @@
else
dir = SOUTH
+ if(!Adjacent(movement_target)) //can't reach food through windows.
+ return
+
if(isturf(movement_target.loc) )
movement_target.attack_animal(src)
else if(ishuman(movement_target.loc) )
if(prob(20))
- emote("stares at [movement_target.loc]'s [movement_target] with a sad puppy-face")
+ emote("me", 1, "stares at [movement_target.loc]'s [movement_target] with a sad puppy-face")
if(prob(1))
- emote(pick("dances around","chases its tail"))
+ emote("me", 1, pick("dances around.","chases its tail!"))
spawn(0)
if (ckey == null)
for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2))
@@ -375,7 +464,7 @@
name = "Corgi meat"
desc = "Tastes like... well you know..."
-/mob/living/simple_animal/corgi/Ian/Bump(atom/movable/AM as mob|obj, yes)
+/mob/living/simple_animal/pet/corgi/Ian/Bump(atom/movable/AM as mob|obj, yes)
spawn( 0 )
if ((!( yes ) || now_pushing))
@@ -409,70 +498,60 @@
now_pushing = null
return
return
-//PC stuff-Sieve
-/mob/living/simple_animal/corgi/attackby(var/obj/item/O as obj, var/mob/user as mob) //Marker -Agouri
- if(istype(O, /obj/item/weapon/newspaper))
- if(!stat)
- for(var/mob/M in viewers(user, null))
- if ((M.client && !( M.blinded )))
- M.show_message("\blue [user] baps [name] on the nose with the rolled up [O]")
- spawn(0)
- if (ckey == null)
- for(var/i in list(1,2,4,8,4,2,1,2))
- dir = i
- sleep(1)
- else
- ..()
-
-/mob/living/simple_animal/corgi/regenerate_icons()
+/mob/living/simple_animal/pet/corgi/regenerate_icons()
overlays.Cut()
-
if(inventory_head)
- var/head_icon_state = inventory_head.icon_state
+ var/image/head_icon
if(health <= 0)
- head_icon_state += "2"
-
- var/icon/head_icon = image('icons/mob/corgi_head.dmi',head_icon_state)
- if(head_icon)
- overlays += head_icon
-
+ head_icon = image('icons/mob/corgi_head.dmi', icon_state = inventory_head.icon_state, dir = EAST)
+ head_icon.pixel_y = -8
+ head_icon.transform = turn(head_icon.transform, 180)
+ else
+ head_icon = image('icons/mob/corgi_head.dmi', icon_state = inventory_head.icon_state)
+ overlays += head_icon
if(inventory_back)
- var/back_icon_state = inventory_back.icon_state
+ var/image/back_icon
if(health <= 0)
- back_icon_state += "2"
-
- var/icon/back_icon = image('icons/mob/corgi_back.dmi',back_icon_state)
- if(back_icon)
- overlays += back_icon
-
+ back_icon = image('icons/mob/corgi_back.dmi', icon_state = inventory_back.icon_state, dir = EAST)
+ back_icon.pixel_y = -11
+ back_icon.transform = turn(back_icon.transform, 180)
+ else
+ back_icon = image('icons/mob/corgi_back.dmi', icon_state = inventory_back.icon_state)
+ overlays += back_icon
if(facehugger)
- if(istype(src, /mob/living/simple_animal/corgi/puppy))
+ if(istype(src, /mob/living/simple_animal/pet/corgi/puppy))
overlays += image('icons/mob/mask.dmi',"facehugger_corgipuppy")
else
overlays += image('icons/mob/mask.dmi',"facehugger_corgi")
+ if(pcollar)
+ overlays += collar
+ overlays += pettag
return
-
-/mob/living/simple_animal/corgi/puppy
+/mob/living/simple_animal/pet/corgi/puppy
name = "\improper corgi puppy"
real_name = "corgi"
desc = "It's a corgi puppy."
icon_state = "puppy"
icon_living = "puppy"
icon_dead = "puppy_dead"
+ shaved = 0
+ density = 0
+ pass_flags = PASSMOB
-//pupplies cannot wear anything.
-/mob/living/simple_animal/corgi/puppy/Topic(href, href_list)
+//puppies cannot wear anything.
+/mob/living/simple_animal/pet/corgi/puppy/Topic(href, href_list)
if(href_list["remove_inv"] || href_list["add_inv"])
- usr << "\red You can't fit this on [src]"
+ usr << "You can't fit this on [src]!"
return
..()
+
//LISA! SQUEEEEEEEEE~
-/mob/living/simple_animal/corgi/Lisa
+/mob/living/simple_animal/pet/corgi/Lisa
name = "Lisa"
real_name = "Lisa"
gender = FEMALE
@@ -487,27 +566,44 @@
var/puppies = 0
//Lisa already has a cute bow!
-/mob/living/simple_animal/corgi/Lisa/Topic(href, href_list)
+/mob/living/simple_animal/pet/corgi/Lisa/Topic(href, href_list)
if(href_list["remove_inv"] || href_list["add_inv"])
usr << "\red [src] already has a cute bow!"
return
..()
-/mob/living/simple_animal/corgi/Lisa/Life()
+/mob/living/simple_animal/pet/corgi/Lisa/Life()
..()
+
make_babies()
if(!stat && !resting && !buckled)
if(prob(1))
if (ckey == null)
- emote(pick("dances around","chases her tail"))
+ emote("me", 1, pick("dances around.","chases her tail."))
spawn(0)
for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2))
dir = i
sleep(1)
-/mob/living/simple_animal/corgi/Ian/borgi
+/mob/living/simple_animal/pet/corgi/attack_hand(mob/living/carbon/human/M)
+ . = ..()
+ switch(M.a_intent)
+ if("help") wuv(1,M)
+ if("harm") wuv(-1,M)
+
+/mob/living/simple_animal/pet/corgi/proc/wuv(change, mob/M)
+ if(change)
+ if(change > 0)
+ if(M && stat != DEAD) // Added check to see if this mob (the corgi) is dead to fix issue 2454
+ flick_overlay(image('icons/mob/animal.dmi',src,"heart-ani2",MOB_LAYER+1), list(M.client), 20)
+ emote("me", 1, "yaps happily!")
+ else
+ if(M && stat != DEAD) // Same check here, even though emote checks it as well (poor form to check it only in the help case)
+ emote("me", 1, "growls!")
+
+/mob/living/simple_animal/pet/corgi/Ian/borgi
name = "E-N"
real_name = "E-N" //Intended to hold the name without altering it.
desc = "It's a borgi."
@@ -515,14 +611,14 @@
icon_living = "borgi"
var/emagged = 0
-/mob/living/simple_animal/corgi/Ian/borgi/emag_act(user as mob)
+/mob/living/simple_animal/pet/corgi/Ian/borgi/emag_act(user as mob)
if(!emagged)
emagged = 1
visible_message("[user] swipes a card through [src].", "You overload [src]s internal reactor.")
spawn (1000)
src.explode()
-/mob/living/simple_animal/corgi/Ian/borgi/proc/explode()
+/mob/living/simple_animal/pet/corgi/Ian/borgi/proc/explode()
for(var/mob/M in viewers(src, null))
if (M.client)
M.show_message("\red [src] makes an odd whining noise.")
@@ -530,7 +626,7 @@
explosion(get_turf(src), 0, 1, 4, 7)
Die()
-/mob/living/simple_animal/corgi/Ian/borgi/proc/shootAt(var/atom/movable/target)
+/mob/living/simple_animal/pet/corgi/Ian/borgi/proc/shootAt(var/atom/movable/target)
var/turf/T = get_turf(src)
var/turf/U = get_turf(target)
if (!T || !U)
@@ -546,7 +642,7 @@
A.process()
return
-/mob/living/simple_animal/corgi/Ian/borgi/Life()
+/mob/living/simple_animal/pet/corgi/Ian/borgi/Life()
..()
if(emagged && prob(25))
var/mob/living/carbon/target = locate() in view(10,src)
@@ -559,7 +655,7 @@
s.set_up(3, 1, src)
s.start()
-/mob/living/simple_animal/corgi/Ian/borgi/Die()
+/mob/living/simple_animal/pet/corgi/Ian/borgi/Die()
..()
visible_message("[src] blows apart!")
new /obj/effect/decal/cleanable/blood/gibs/robot(src.loc)
diff --git a/code/modules/mob/living/simple_animal/friendly/corgi_powers.dm b/code/modules/mob/living/simple_animal/friendly/corgi_powers.dm
index ad945390cd1..c19f3bc9fad 100644
--- a/code/modules/mob/living/simple_animal/friendly/corgi_powers.dm
+++ b/code/modules/mob/living/simple_animal/friendly/corgi_powers.dm
@@ -1,4 +1,4 @@
-/mob/living/simple_animal/corgi/verb/chasetail()
+/mob/living/simple_animal/pet/corgi/verb/chasetail()
set name = "Chase your tail"
set desc = "d'awwww."
set category = "Corgi"
diff --git a/code/modules/mob/living/simple_animal/friendly/crab.dm b/code/modules/mob/living/simple_animal/friendly/crab.dm
index 5e8f8d0d54b..27c266b8a7c 100644
--- a/code/modules/mob/living/simple_animal/friendly/crab.dm
+++ b/code/modules/mob/living/simple_animal/friendly/crab.dm
@@ -18,6 +18,7 @@
response_harm = "stomps the"
stop_automated_movement = 1
friendly = "pinches"
+ ventcrawler = 2
var/obj/item/inventory_head
var/obj/item/inventory_mask
can_hide = 1
diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
index c3c7269515e..4cbddcb2642 100644
--- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
+++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
@@ -20,12 +20,16 @@
faction = list("neutral")
attack_same = 1
attacktext = "kicks"
+ attack_sound = 'sound/weapons/punch1.ogg'
health = 40
melee_damage_lower = 1
- melee_damage_upper = 5
- var/milk_content = 0
+ melee_damage_upper = 2
+ stop_automated_movement_when_pulled = 1
+ var/datum/reagents/udder = null
/mob/living/simple_animal/hostile/retaliate/goat/New()
+ udder = new(50)
+ udder.my_atom = src
..()
/mob/living/simple_animal/hostile/retaliate/goat/Life()
@@ -40,8 +44,9 @@
LoseTarget()
src.visible_message("\blue [src] calms down.")
- if(stat == CONSCIOUS && prob(5))
- milk_content = min(50, milk_content+rand(5, 10))
+ if(stat == CONSCIOUS)
+ if(udder && prob(5))
+ udder.add_reagent("milk", rand(5, 10))
if(locate(/obj/effect/plant) in loc)
var/obj/effect/plant/SV = locate(/obj/effect/plant) in loc
@@ -54,7 +59,7 @@
var/step = get_step(src, direction)
if(step)
if(locate(/obj/effect/plant) in step)
- Move(step)
+ Move(step, get_dir(src, step))
/mob/living/simple_animal/hostile/retaliate/goat/Retaliate()
..()
@@ -71,17 +76,13 @@
/mob/living/simple_animal/hostile/retaliate/goat/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
if(stat == CONSCIOUS && istype(O, /obj/item/weapon/reagent_containers/glass))
- user.changeNext_move(CLICK_CD_MELEE)
+ user.visible_message("[user] milks [src] using \the [O].", "You milk [src] using \the [O].")
var/obj/item/weapon/reagent_containers/glass/G = O
- var/transfered = min(milk_content, rand(5,10), (G.volume - G.reagents.total_volume))
- if(transfered > 0)
- user.visible_message("[user] milks [src] using \the [O].")
- G.reagents.add_reagent("milk", transfered)
- milk_content -= transfered
- else if(G.reagents.total_volume >= G.volume)
- user << "\red \The [O] is full."
- else
- user << "\red The udder is dry. Wait a bit longer..."
+ var/transfered = udder.trans_id_to(G, "milk", rand(5,10))
+ if(G.reagents.total_volume >= G.volume)
+ user << "[O] is full!"
+ if(!transfered)
+ user << "The udder is dry! Wait a bit longer..."
else
..()
//cow
@@ -105,32 +106,32 @@
response_disarm = "gently pushes aside the"
response_harm = "kicks the"
attacktext = "kicks"
+ attack_sound = 'sound/weapons/punch1.ogg'
health = 50
- var/milk_content = 0
+ var/datum/reagents/udder = null
/mob/living/simple_animal/cow/New()
+ udder = new(50)
+ udder.my_atom = src
..()
-/mob/living/simple_animal/cow/attackby(var/obj/item/O as obj, var/mob/user as mob, params, params)
+/mob/living/simple_animal/cow/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
if(stat == CONSCIOUS && istype(O, /obj/item/weapon/reagent_containers/glass))
- user.changeNext_move(CLICK_CD_MELEE)
+ user.visible_message("[user] milks [src] using \the [O].", "You milk [src] using \the [O].")
var/obj/item/weapon/reagent_containers/glass/G = O
- var/transfered = min(milk_content, rand(5,10), (G.volume - G.reagents.total_volume))
- if(transfered > 0)
- user.visible_message("[user] milks [src] using \the [O].")
- G.reagents.add_reagent("milk", transfered)
- milk_content -= transfered
- else if(G.reagents.total_volume >= G.volume)
- user << "\red \The [O] is full."
- else
- user << "\red The udder is dry. Wait a bit longer..."
+ var/transfered = udder.trans_id_to(G, "milk", rand(5,10))
+ if(G.reagents.total_volume >= G.volume)
+ user << "[O] is full."
+ if(!transfered)
+ user << "The udder is dry. Wait a bit longer..."
else
..()
/mob/living/simple_animal/cow/Life()
. = ..()
- if(stat == CONSCIOUS && prob(5))
- milk_content = min(50, milk_content+rand(5, 10))
+ if(stat == CONSCIOUS)
+ if(udder && prob(5))
+ udder.add_reagent("milk", rand(5, 10))
/mob/living/simple_animal/cow/attack_hand(mob/living/carbon/M as mob)
if(!stat && M.a_intent == "disarm" && icon_state != icon_dead)
@@ -159,6 +160,7 @@
speak_emote = list("cheeps")
emote_hear = list("cheeps")
emote_see = list("pecks at the ground","flaps its tiny wings")
+ density = 0
speak_chance = 2
turns_per_move = 2
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
@@ -168,8 +170,9 @@
response_harm = "kicks the"
attacktext = "kicks"
health = 1
+ ventcrawler = 2
var/amount_grown = 0
- pass_flags = PASSTABLE | PASSGRILLE
+ pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
small = 1
can_hide = 1
@@ -186,7 +189,7 @@
amount_grown += rand(1,2)
if(amount_grown >= 100)
new /mob/living/simple_animal/chicken(src.loc)
- del(src)
+ qdel(src)
var/const/MAX_CHICKENS = 50
var/global/chicken_count = 0
@@ -201,6 +204,7 @@ var/global/chicken_count = 0
speak_emote = list("clucks","croons")
emote_hear = list("clucks")
emote_see = list("pecks at the ground","flaps its wings viciously")
+ density = 0
speak_chance = 2
turns_per_move = 3
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
@@ -212,7 +216,7 @@ var/global/chicken_count = 0
health = 10
var/eggsleft = 0
var/_color
- pass_flags = PASSTABLE
+ pass_flags = PASSTABLE | PASSMOB
small = 1
can_hide = 1
diff --git a/code/modules/mob/living/simple_animal/friendly/fox.dm b/code/modules/mob/living/simple_animal/friendly/fox.dm
index 6b682cabc88..af2994feeef 100644
--- a/code/modules/mob/living/simple_animal/friendly/fox.dm
+++ b/code/modules/mob/living/simple_animal/friendly/fox.dm
@@ -1,5 +1,5 @@
//Foxxy
-/mob/living/simple_animal/fox
+/mob/living/simple_animal/pet/fox
name = "fox"
desc = "It's a fox. I wonder what it says?"
icon_state = "fox"
@@ -19,12 +19,12 @@
response_harm = "kicks"
//Captain fox
-/mob/living/simple_animal/fox/Renault
+/mob/living/simple_animal/pet/fox/Renault
name = "Renault"
desc = "Renault, the Captain's trustworthy fox. I wonder what it says?"
//Syndi fox
-/mob/living/simple_animal/fox/Syndifox
+/mob/living/simple_animal/pet/fox/Syndifox
name = "Syndifox"
desc = "Syndifox, the Syndicate's most respected mascot. I wonder what it says?"
icon_state = "Syndifox"
diff --git a/code/modules/mob/living/simple_animal/friendly/lizard.dm b/code/modules/mob/living/simple_animal/friendly/lizard.dm
index 0b513d524fb..a805d06a1e4 100644
--- a/code/modules/mob/living/simple_animal/friendly/lizard.dm
+++ b/code/modules/mob/living/simple_animal/friendly/lizard.dm
@@ -16,5 +16,7 @@
response_help = "pets"
response_disarm = "shoos"
response_harm = "stomps on"
- pass_flags = PASSTABLE
+ ventcrawler = 2
+ density = 0
+ pass_flags = PASSTABLE | PASSMOB
can_hide = 1
diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm
index 40eb01184c3..1c25a12f2c1 100644
--- a/code/modules/mob/living/simple_animal/friendly/mouse.dm
+++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm
@@ -9,7 +9,6 @@
speak_emote = list("squeeks","squeeks","squiks")
emote_hear = list("squeeks","squeaks","squiks")
emote_see = list("runs in a circle", "shakes", "scritches at something")
- pass_flags = PASSTABLE
small = 1
speak_chance = 1
turns_per_move = 5
@@ -22,6 +21,8 @@
response_disarm = "gently pushes aside the"
response_harm = "stamps on the"
density = 0
+ ventcrawler = 2
+ pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
var/_color //brown, gray and white, leave blank for random
layer = MOB_LAYER
min_oxy = 16 //Require atleast 16kPA oxygen
@@ -29,7 +30,6 @@
maxbodytemp = 323 //Above 50 Degrees Celcius
universal_speak = 0
can_hide = 1
- ventcrawler = 2
/mob/living/simple_animal/mouse/Life()
..()
diff --git a/code/modules/mob/living/simple_animal/friendly/pet.dm b/code/modules/mob/living/simple_animal/friendly/pet.dm
new file mode 100644
index 00000000000..20a8765921a
--- /dev/null
+++ b/code/modules/mob/living/simple_animal/friendly/pet.dm
@@ -0,0 +1,46 @@
+/mob/living/simple_animal/pet
+ icon = 'icons/mob/pets.dmi'
+ var/obj/item/clothing/accessory/petcollar/pcollar = null
+ var/image/collar = null
+ var/image/pettag = null
+
+/mob/living/simple_animal/pet/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
+ if(istype(O, /obj/item/clothing/accessory/petcollar) && !pcollar)
+ var/obj/item/clothing/accessory/petcollar/P = O
+ pcollar = P
+ collar = image('icons/mob/pets.dmi', src, "[icon_state]collar")
+ pettag = image('icons/mob/pets.dmi', src, "[icon_state]tag")
+ regenerate_icons()
+ user << "You put the [P] around [src]'s neck."
+ if(P.tagname)
+ name = P.tagname
+ qdel(P)
+ return
+ if(istype(O, /obj/item/weapon/newspaper))
+ if(!stat)
+ user.visible_message("[user] baps [name] on the nose with the rolled up [O].")
+ spawn(0)
+ for(var/i in list(1,2,4,8,4,2,1,2))
+ dir = i
+ sleep(1)
+ else
+ ..()
+
+/mob/living/simple_animal/pet/New()
+ ..()
+ if(pcollar)
+ pcollar = new(src)
+ regenerate_icons()
+
+/mob/living/simple_animal/pet/revive()
+ ..()
+ regenerate_icons()
+
+/mob/living/simple_animal/pet/Die()
+ ..()
+ regenerate_icons()
+
+/mob/living/simple_animal/pet/regenerate_icons()
+ overlays.Cut()
+ overlays += collar
+ overlays += pettag
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/friendly/pug.dm b/code/modules/mob/living/simple_animal/friendly/pug.dm
index 62456ed8a8b..224d46dd8f7 100644
--- a/code/modules/mob/living/simple_animal/friendly/pug.dm
+++ b/code/modules/mob/living/simple_animal/friendly/pug.dm
@@ -1,5 +1,5 @@
//Corgi //best comment 2014
-/mob/living/simple_animal/pug
+/mob/living/simple_animal/pet/pug
name = "\improper pug"
real_name = "pug"
desc = "It's a pug."
@@ -19,7 +19,7 @@
response_harm = "kicks"
see_in_dark = 5
-/mob/living/simple_animal/pug/Life()
+/mob/living/simple_animal/pet/pug/Life()
..()
if(!stat && !resting && !buckled)
@@ -29,14 +29,3 @@
for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2))
dir = i
sleep(1)
-
-/mob/living/simple_animal/pug/attackby(var/obj/item/O as obj, var/mob/user as mob) //Marker -Agouri
- if(istype(O, /obj/item/weapon/newspaper))
- if(!stat)
- user.visible_message("[user] baps [name] on the nose with the rolled up [O]")
- spawn(0)
- for(var/i in list(1,2,4,8,4,2,1,2))
- dir = i
- sleep(1)
- else
- ..()
diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm
index c41424649cc..c2dc78c5377 100644
--- a/code/modules/mob/living/simple_animal/hostile/alien.dm
+++ b/code/modules/mob/living/simple_animal/hostile/alien.dm
@@ -9,7 +9,7 @@
response_help = "pokes the"
response_disarm = "shoves the"
response_harm = "hits the"
- speed = -1
+ speed = 0
meat_type = /obj/item/weapon/reagent_containers/food/snacks/xenomeat
meat_amount = 3
maxHealth = 100
@@ -18,6 +18,7 @@
melee_damage_lower = 25
melee_damage_upper = 25
attacktext = "slashes"
+ speak_emote = list("hisses")
a_intent = "harm"
attack_sound = 'sound/weapons/bladeslice.ogg'
min_oxy = 0
@@ -33,6 +34,8 @@
faction = list("alien")
status_flags = CANPUSH
minbodytemp = 0
+ see_in_dark = 8
+ see_invisible = SEE_INVISIBLE_MINIMUM
heat_damage_per_tick = 20
@@ -44,6 +47,17 @@
health = 60
melee_damage_lower = 15
melee_damage_upper = 15
+ var/plant_cooldown = 30
+ var/plants_off = 0
+
+/mob/living/simple_animal/hostile/alien/drone/Life()
+ ..()
+ if(!stat)
+ plant_cooldown--
+ if(stance==HOSTILE_STANCE_IDLE)
+ if(!plants_off && prob(10) && plant_cooldown<=0)
+ plant_cooldown = initial(plant_cooldown)
+ SpreadPlants()
/mob/living/simple_animal/hostile/alien/sentinel
name = "alien sentinel"
@@ -72,11 +86,43 @@
ranged = 1
retreat_distance = 5
minimum_distance = 5
- move_to_delay = 3
+ move_to_delay = 4
projectiletype = /obj/item/projectile/neurotox
projectilesound = 'sound/weapons/pierce.ogg'
- rapid = 1
status_flags = 0
+ var/sterile = 1
+ var/plants_off = 0
+ var/egg_cooldown = 30
+ var/plant_cooldown = 30
+
+/mob/living/simple_animal/hostile/alien/queen/Life()
+ ..()
+ if(!stat)
+ egg_cooldown--
+ plant_cooldown--
+ if(stance==HOSTILE_STANCE_IDLE)
+ if(!plants_off && prob(10) && plant_cooldown<=0)
+ plant_cooldown = initial(plant_cooldown)
+ SpreadPlants()
+ if(!sterile && prob(10) && egg_cooldown<=0)
+ egg_cooldown = initial(egg_cooldown)
+ LayEggs()
+
+/mob/living/simple_animal/hostile/alien/proc/SpreadPlants()
+ if(!isturf(loc) || istype(loc, /turf/space))
+ return
+ if(locate(/obj/structure/alien/weeds/node) in get_turf(src))
+ return
+ visible_message("[src] has planted some alien weeds!")
+ new /obj/structure/alien/weeds/node(loc)
+
+/mob/living/simple_animal/hostile/alien/proc/LayEggs()
+ if(!isturf(loc) || istype(loc, /turf/space))
+ return
+ if(locate(/obj/structure/alien/egg) in get_turf(src))
+ return
+ visible_message("[src] has laid an egg!")
+ new /obj/structure/alien/egg(loc)
/mob/living/simple_animal/hostile/alien/queen/large
name = "alien empress"
@@ -89,6 +135,7 @@
health = 400
/obj/item/projectile/neurotox
+ name = "neurotoxin"
damage = 30
icon_state = "toxin"
diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm
index 25113ae500c..87447f83c1c 100644
--- a/code/modules/mob/living/simple_animal/hostile/bear.dm
+++ b/code/modules/mob/living/simple_animal/hostile/bear.dm
@@ -1,7 +1,7 @@
//Space bears!
/mob/living/simple_animal/hostile/bear
name = "space bear"
- desc = "RawrRawr!!"
+ desc = "You don't need to be faster than a space bear, you just need to outrun your crewmates."
icon_state = "bear"
icon_living = "bear"
icon_dead = "bear_dead"
@@ -14,7 +14,7 @@
turns_per_move = 5
see_in_dark = 6
meat_type = /obj/item/weapon/reagent_containers/food/snacks/bearmeat
- meat_amount = 6
+ meat_amount = 5
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "hits"
diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm
index d7111df0db7..4575a083827 100644
--- a/code/modules/mob/living/simple_animal/hostile/carp.dm
+++ b/code/modules/mob/living/simple_animal/hostile/carp.dm
@@ -40,6 +40,7 @@
faction = list("carp")
+ flying = 1
/mob/living/simple_animal/hostile/carp/Process_Spacemove(var/check_drift = 0)
return 1 //No drifting in space for space carp! //original comments do not steal
@@ -47,21 +48,37 @@
/mob/living/simple_animal/hostile/carp/FindTarget()
. = ..()
if(.)
- emote("nashes at [.]")
+ emote("me", 1, "gnashes at [.]!")
/mob/living/simple_animal/hostile/carp/AttackingTarget()
- . =..()
- var/mob/living/L = .
- if(istype(L))
- if(prob(15))
- L.Weaken(3)
- L.visible_message("\the [src] knocks down \the [L]!")
+ ..()
+ if(ishuman(target))
+ var/mob/living/carbon/human/H = target
+ H.adjustStaminaLoss(8)
/mob/living/simple_animal/hostile/carp/holocarp
icon_state = "holocarp"
icon_living = "holocarp"
+ maxbodytemp = INFINITY
/mob/living/simple_animal/hostile/carp/holocarp/Die()
- del(src)
- return
\ No newline at end of file
+ ..()
+ ghostize()
+ qdel(src)
+ return
+
+/mob/living/simple_animal/hostile/carp/megacarp
+ icon = 'icons/mob/alienqueen.dmi'
+ name = "Mega Space Carp"
+ desc = "A ferocious, fang bearing creature that resembles a shark. This one seems especially ticked off."
+ icon_state = "megacarp"
+ icon_living = "megacarp"
+ icon_dead = "megacarp_dead"
+ icon_gib = "megacarp_gib"
+ maxHealth = 65
+ health = 65
+ pixel_x = -16
+
+ melee_damage_lower = 20
+ melee_damage_upper = 20
\ 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
index d72d913e6c5..9a3357e058a 100644
--- a/code/modules/mob/living/simple_animal/hostile/creature.dm
+++ b/code/modules/mob/living/simple_animal/hostile/creature.dm
@@ -13,4 +13,4 @@
attacktext = "chomps"
attack_sound = 'sound/weapons/bite.ogg'
faction = list("creature")
- speed = 4
\ No newline at end of file
+
diff --git a/code/modules/mob/living/simple_animal/hostile/faithless.dm b/code/modules/mob/living/simple_animal/hostile/faithless.dm
index 7d0960102cc..dbf396eb7f5 100644
--- a/code/modules/mob/living/simple_animal/hostile/faithless.dm
+++ b/code/modules/mob/living/simple_animal/hostile/faithless.dm
@@ -9,7 +9,7 @@
response_help = "passes through the"
response_disarm = "shoves"
response_harm = "hits the"
- speed = -1
+ speed = 0
maxHealth = 80
health = 80
@@ -18,6 +18,7 @@
melee_damage_upper = 15
attacktext = "grips"
attack_sound = 'sound/hallucinations/growl1.ogg'
+ speak_emote = list("growls")
min_oxy = 0
max_oxy = 0
@@ -38,12 +39,13 @@
/mob/living/simple_animal/hostile/faithless/FindTarget()
. = ..()
if(.)
- emote("wails at [.]")
+ emote("me", 1, "wails at [.]!")
/mob/living/simple_animal/hostile/faithless/AttackingTarget()
- . =..()
- var/mob/living/L = .
- if(istype(L))
+ ..()
+ if(iscarbon(target))
+ var/mob/living/carbon/C = target
if(prob(12))
- L.Weaken(3)
- L.visible_message("\the [src] knocks down \the [L]!")
\ No newline at end of file
+ C.Weaken(3)
+ C.visible_message("\The [src] knocks down \the [C]!", \
+ "\The [src] knocks you down!")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/hostile/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebot.dm
index ab7e50170b0..91e99507875 100644
--- a/code/modules/mob/living/simple_animal/hostile/hivebot.dm
+++ b/code/modules/mob/living/simple_animal/hostile/hivebot.dm
@@ -14,6 +14,7 @@
melee_damage_lower = 2
melee_damage_upper = 3
attacktext = "claws"
+ attack_sound = 'sound/weapons/bladeslice.ogg'
projectilesound = 'sound/weapons/Gunshot.ogg'
projectiletype = /obj/item/projectile/hivebotbullet
faction = list("hivebot")
@@ -26,7 +27,7 @@
min_n2 = 0
max_n2 = 0
minbodytemp = 0
- speed = 4
+ speak_emote = list("states")
/mob/living/simple_animal/hostile/hivebot/range
name = "Hivebot"
@@ -54,7 +55,8 @@
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, src)
s.start()
- del src
+ ghostize()
+ qdel(src)
return
/mob/living/simple_animal/hostile/hivebot/tele//this still needs work
diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm
index 723146df082..74de3086a9c 100644
--- a/code/modules/mob/living/simple_animal/hostile/mimic.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm
@@ -21,6 +21,7 @@
melee_damage_upper = 12
attacktext = "attacks"
attack_sound = 'sound/weapons/bite.ogg'
+ speak_emote = list("creaks")
min_oxy = 0
max_oxy = 0
@@ -43,7 +44,8 @@
/mob/living/simple_animal/hostile/mimic/Die()
..()
visible_message("\red [src] stops moving!")
- del(src)
+ ghostize()
+ qdel(src)
@@ -177,6 +179,7 @@ var/global/list/protected_objects = list(/obj/structure/table, /obj/structure/ca
icon = O.icon
icon_state = O.icon_state
icon_living = icon_state
+ overlays = O.overlays
if(istype(O, /obj/structure) || istype(O, /obj/machinery))
health = (anchored * 50) + 50
@@ -197,7 +200,7 @@ var/global/list/protected_objects = list(/obj/structure/table, /obj/structure/ca
src.creator = creator
faction += "\ref[creator]" // very unique
if(destroy_original)
- del(O)
+ qdel(O)
return 1
return
@@ -206,13 +209,14 @@ var/global/list/protected_objects = list(/obj/structure/table, /obj/structure/ca
..()
/mob/living/simple_animal/hostile/mimic/copy/AttackingTarget()
- . =..()
+ ..()
if(knockdown_people)
- var/mob/living/L = .
- if(istype(L))
+ if(iscarbon(target))
+ var/mob/living/carbon/C = target
if(prob(15))
- L.Weaken(1)
- L.visible_message("\the [src] knocks down \the [L]!")
+ C.Weaken(2)
+ C.visible_message("\The [src] knocks down \the [C]!", \
+ "\The [src] knocks you down!")
//
// Machine Mimics (Made by Malf AI)
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm
index b2d8c1c37e1..1afde85d5a0 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm
@@ -74,6 +74,7 @@
melee_damage_upper = 12
attacktext = "bites into"
a_intent = "harm"
+ speak_emote = list("chitters")
attack_sound = 'sound/weapons/bladeslice.ogg'
ranged_cooldown_cap = 4
aggro_vision_range = 9
@@ -97,8 +98,8 @@
stance = HOSTILE_STANCE_ATTACK
if(isliving(target))
var/mob/living/L = target
- if(L.bodytemperature > 261)
- L.bodytemperature = 261
+ if(L.bodytemperature > 200)
+ L.bodytemperature = 200
visible_message("The [src.name]'s stare chills [L.name] to the bone!")
return
@@ -142,6 +143,7 @@
attacktext = "barrels into"
attack_sound = 'sound/weapons/punch1.ogg'
a_intent = "help"
+ speak_emote = list("screeches")
throw_message = "sinks in slowly, before being pushed out of "
status_flags = CANPUSH
search_objects = 1
@@ -181,7 +183,7 @@
ore_eaten++
if(!(O.type in ore_types_eaten))
ore_types_eaten += O.type
- del(O)
+ qdel(O)
if(ore_eaten > 5)//Limit the scope of the reward you can get, or else things might get silly
ore_eaten = 5
visible_message("The ore was swallowed whole!")
@@ -192,7 +194,7 @@
spawn(chase_time)
if(alerted)
visible_message("The [src.name] buries into the ground, vanishing from sight!")
- del(src)
+ qdel(src)
/mob/living/simple_animal/hostile/asteroid/goldgrub/proc/Reward()
if(!ore_eaten || ore_types_eaten.len == 0)
@@ -242,6 +244,7 @@
melee_damage_upper = 0
attacktext = "lashes out at"
speak_emote = list("telepathically cries")
+ attack_sound = 'sound/weapons/pierce.ogg'
throw_message = "falls right through the strange body of the"
ranged_cooldown = 0
ranged_cooldown_cap = 0
@@ -262,6 +265,7 @@
/mob/living/simple_animal/hostile/asteroid/hivelord/Die()
new /obj/item/asteroid/hivelord_core(src.loc)
+ mouse_opacity = 1
..()
/obj/item/asteroid/hivelord_core
@@ -316,6 +320,7 @@
melee_damage_upper = 2
attacktext = "slashes"
speak_emote = list("telepathically cries")
+ attack_sound = 'sound/weapons/pierce.ogg'
throw_message = "falls right through the strange body of the"
environment_smash = 0
pass_flags = PASSTABLE
diff --git a/code/modules/mob/living/simple_animal/hostile/mushroom.dm b/code/modules/mob/living/simple_animal/hostile/mushroom.dm
index 046274a541c..0d1d16ac19a 100644
--- a/code/modules/mob/living/simple_animal/hostile/mushroom.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mushroom.dm
@@ -17,11 +17,15 @@
melee_damage_upper = 1
attack_same = 2
attacktext = "chomps"
+ attack_sound = 'sound/weapons/bite.ogg'
faction = list("mushroom")
environment_smash = 0
stat_attack = 2
mouse_opacity = 1
speed = 1
+ ventcrawler = 2
+ robust_searching = 1
+ speak_emote = list("squeaks")
var/powerlevel = 0 //Tracks our general strength level gained from eating other shrooms
var/bruised = 0 //If someone tries to cheat the system by attacking a shroom to lower its health, punish them so that it wont award levels to shrooms that eat it
var/recovery_cooldown = 0 //So you can't repeatedly revive it during a fight
@@ -39,19 +43,20 @@
/mob/living/simple_animal/hostile/mushroom/Life()
..()
if(!stat)//Mushrooms slowly regenerate if conscious, for people who want to save them from being eaten
- health = min(health+2, maxHealth)
+ adjustBruteLoss(-2)
/mob/living/simple_animal/hostile/mushroom/New()//Makes every shroom a little unique
melee_damage_lower += rand(3, 5)
melee_damage_upper += rand(10,20)
maxHealth += rand(40,60)
- move_to_delay = rand(2,10)
+ move_to_delay = rand(3,11)
var/cap_color = rgb(rand(0, 255), rand(0, 255), rand(0, 255))
cap_living = image('icons/mob/animal.dmi',icon_state = "mushroom_cap")
cap_dead = image('icons/mob/animal.dmi',icon_state = "mushroom_cap_dead")
cap_living.color = cap_color
cap_dead.color = cap_color
UpdateMushroomCap()
+ health = maxHealth
..()
/mob/living/simple_animal/hostile/mushroom/adjustBruteLoss(var/damage)//Possibility to flee from a fight just to make it more visually interesting
@@ -74,8 +79,8 @@
if(level_gain < 1)//So we still gain a level if two mushrooms were the same level
level_gain = 1
M.LevelUp(level_gain)
- M.health = M.maxHealth
- del(src)
+ M.adjustBruteLoss(-M.maxHealth)
+ qdel(src)
..()
/mob/living/simple_animal/hostile/mushroom/revive()
@@ -97,9 +102,8 @@
/mob/living/simple_animal/hostile/mushroom/proc/Recover()
visible_message("[src] slowly begins to recover.")
- health = 5
faint_ticker = 0
- icon_state = icon_living
+ revive()
UpdateMushroomCap()
recovery_cooldown = 1
spawn(300)
@@ -113,7 +117,7 @@
else
melee_damage_upper += (level_gain * rand(1,5))
maxHealth += (level_gain * rand(1,5))
- health = maxHealth //They'll always heal, even if they don't gain a level, in case you want to keep this shroom around instead of harvesting it
+ adjustBruteLoss(-maxHealth) //They'll always heal, even if they don't gain a level, in case you want to keep this shroom around instead of harvesting it
/mob/living/simple_animal/hostile/mushroom/proc/Bruise()
if(!bruised && !stat)
@@ -124,7 +128,7 @@
if(istype(I, /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom))
if(stat == DEAD && !recovery_cooldown)
Recover()
- del(I)
+ qdel(I)
else
user << "[src] won't eat it!"
return
@@ -155,4 +159,4 @@
S.reagents.add_reagent("mushroomhallucinogen", powerlevel)
S.reagents.add_reagent("omnizine", powerlevel)
S.reagents.add_reagent("synaptizine", powerlevel)
- del(src)
\ No newline at end of file
+ qdel(src)
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/hostile/pirate.dm b/code/modules/mob/living/simple_animal/hostile/pirate.dm
index d886c0beff2..b642c5c6dda 100644
--- a/code/modules/mob/living/simple_animal/hostile/pirate.dm
+++ b/code/modules/mob/living/simple_animal/hostile/pirate.dm
@@ -9,8 +9,7 @@
response_help = "pushes the"
response_disarm = "shoves"
response_harm = "hits the"
- speed = 4
- stop_automated_movement_when_pulled = 0
+ speed = 0
maxHealth = 100
health = 100
@@ -29,6 +28,7 @@
min_n2 = 0
max_n2 = 0
unsuitable_atoms_damage = 15
+ speak_emote = list("yarrs")
var/corpse = /obj/effect/landmark/mobcorpse/pirate
var/weapon1 = /obj/item/weapon/melee/energy/sword/pirate
@@ -55,5 +55,6 @@
new corpse (src.loc)
if(weapon1)
new weapon1 (src.loc)
- del src
+ ghostize()
+ qdel(src)
return
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm
index 68d0e3c5cdb..d62a4ba976d 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm
@@ -14,15 +14,15 @@
emote_see = list("honks")
speak_chance = 1
a_intent = "harm"
- stop_automated_movement_when_pulled = 0
maxHealth = 75
health = 75
- speed = -1
+ speed = 0
harm_intent_damage = 8
melee_damage_lower = 10
melee_damage_upper = 10
attacktext = "attacks"
attack_sound = 'sound/items/bikehorn.ogg'
+ environment_smash = 0
min_oxy = 5
max_oxy = 0
diff --git a/code/modules/mob/living/simple_animal/hostile/russian.dm b/code/modules/mob/living/simple_animal/hostile/russian.dm
index 0da2e3bf84f..b594de5e398 100644
--- a/code/modules/mob/living/simple_animal/hostile/russian.dm
+++ b/code/modules/mob/living/simple_animal/hostile/russian.dm
@@ -10,14 +10,14 @@
response_help = "pokes the"
response_disarm = "shoves the"
response_harm = "hits the"
- speed = 4
- stop_automated_movement_when_pulled = 0
+ speed = 0
maxHealth = 100
health = 100
harm_intent_damage = 5
melee_damage_lower = 15
melee_damage_upper = 15
attacktext = "punches"
+ attack_sound = 'sound/weapons/punch1.ogg'
a_intent = "harm"
var/corpse = /obj/effect/landmark/mobcorpse/russian
var/weapon1 = /obj/item/weapon/kitchenknife
diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm
index c5c9c24b577..d7ac5db34f6 100644
--- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm
+++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm
@@ -10,14 +10,14 @@
response_help = "pokes the"
response_disarm = "shoves the"
response_harm = "hits the"
- speed = 4
- stop_automated_movement_when_pulled = 0
+ speed = 0
maxHealth = 100
health = 100
harm_intent_damage = 5
melee_damage_lower = 10
melee_damage_upper = 10
attacktext = "punches"
+ attack_sound = 'sound/weapons/punch1.ogg'
a_intent = "harm"
var/corpse = /obj/effect/landmark/mobcorpse/syndicatesoldier
var/weapon1
@@ -55,6 +55,7 @@
weapon1 = /obj/item/weapon/melee/energy/sword/red
weapon2 = /obj/item/weapon/shield/energy
attacktext = "slashes"
+ attack_sound = 'sound/weapons/bladeslice.ogg'
status_flags = 0
/mob/living/simple_animal/hostile/syndicate/melee/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
@@ -67,6 +68,7 @@
visible_message("\red \b [src] has been attacked with the [O] by [user]. ")
else
visible_message("\red \b [src] blocks the [O] with its shield! ")
+ playsound(loc, O.hitsound, 25, 1, -1)
else
usr << "\red This weapon is ineffective, it does no damage."
visible_message("\red [user] gently taps [src] with the [O]. ")
@@ -96,7 +98,7 @@
icon_living = "syndicatemeleespace"
name = "Syndicate Commando"
corpse = /obj/effect/landmark/mobcorpse/syndicatecommando
- speed = 0
+ speed = 1
/mob/living/simple_animal/hostile/syndicate/melee/space/Process_Spacemove(var/check_drift = 0)
return
@@ -128,7 +130,7 @@
max_n2 = 0
minbodytemp = 0
corpse = /obj/effect/landmark/mobcorpse/syndicatecommando
- speed = 0
+ speed = 1
/mob/living/simple_animal/hostile/syndicate/ranged/space/Process_Spacemove(var/check_drift = 0)
return
@@ -158,6 +160,7 @@
min_n2 = 0
max_n2 = 0
minbodytemp = 0
+ flying = 1
/mob/living/simple_animal/hostile/viscerator/Die()
..()
diff --git a/code/modules/mob/living/simple_animal/hostile/tree.dm b/code/modules/mob/living/simple_animal/hostile/tree.dm
index 6e23603723e..c03e6dbdcb0 100644
--- a/code/modules/mob/living/simple_animal/hostile/tree.dm
+++ b/code/modules/mob/living/simple_animal/hostile/tree.dm
@@ -8,11 +8,10 @@
icon_gib = "pine_1"
speak_chance = 0
turns_per_move = 5
- meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat
response_help = "brushes the"
response_disarm = "pushes the"
response_harm = "hits the"
- speed = -1
+ speed = 1
maxHealth = 250
health = 250
@@ -23,6 +22,7 @@
melee_damage_upper = 12
attacktext = "bites"
attack_sound = 'sound/weapons/bite.ogg'
+ speak_emote = list("pines")
//Space carp aren't affected by atmos.
min_oxy = 0
@@ -35,7 +35,7 @@
max_n2 = 0
minbodytemp = 0
- faction = list("carp")
+ faction = list("hostile")
/mob/living/simple_animal/hostile/tree/FindTarget()
. = ..()
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index 49420198f26..5dfa7fe46db 100644
--- a/code/modules/mob/mob_helpers.dm
+++ b/code/modules/mob/mob_helpers.dm
@@ -58,7 +58,7 @@ proc/isembryo(A)
return 0
/proc/iscorgi(A)
- if(istype(A, /mob/living/simple_animal/corgi))
+ if(istype(A, /mob/living/simple_animal/pet/corgi))
return 1
return 0
@@ -68,7 +68,7 @@ proc/isembryo(A)
return 0
/proc/iscat(A)
- if(istype(A, /mob/living/simple_animal/cat))
+ if(istype(A, /mob/living/simple_animal/pet/cat))
return 1
return 0
diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm
index 4a6138e094a..0aa42b25e2e 100644
--- a/code/modules/mob/transform_procs.dm
+++ b/code/modules/mob/transform_procs.dm
@@ -318,7 +318,7 @@
for(var/t in organs) //this really should not be necessary
del(t)
- var/mob/living/simple_animal/corgi/new_corgi = new /mob/living/simple_animal/corgi (loc)
+ var/mob/living/simple_animal/pet/corgi/new_corgi = new /mob/living/simple_animal/pet/corgi (loc)
new_corgi.a_intent = "harm"
new_corgi.key = key
@@ -408,9 +408,9 @@
return 0 //Verbs do not appear for players. These constructs should really have their own class simple_animal/construct/subtype
//Good mobs!
- if(ispath(MP, /mob/living/simple_animal/cat))
+ if(ispath(MP, /mob/living/simple_animal/pet/cat))
return 1
- if(ispath(MP, /mob/living/simple_animal/corgi))
+ if(ispath(MP, /mob/living/simple_animal/pet/corgi))
return 1
if(ispath(MP, /mob/living/simple_animal/crab))
return 1
@@ -430,11 +430,11 @@
return 1 //Parrots are no longer unfinished! -Nodrak
if(ispath(MP, /mob/living/simple_animal/pony))
return 1 // ZOMG PONIES WHEEE
- if(ispath(MP, /mob/living/simple_animal/fox))
+ if(ispath(MP, /mob/living/simple_animal/pet/fox))
return 1
if(ispath(MP, /mob/living/simple_animal/chick))
return 1
- if(ispath(MP, /mob/living/simple_animal/pug))
+ if(ispath(MP, /mob/living/simple_animal/pet/pug))
return 1
if(ispath(MP, /mob/living/simple_animal/butterfly))
return 1
@@ -447,9 +447,9 @@
return 0 //Sanity, this should never happen.
//Animals!
- if(ispath(MP, /mob/living/simple_animal/cat))
+ if(ispath(MP, /mob/living/simple_animal/pet/cat))
return 1
- if(ispath(MP, /mob/living/simple_animal/corgi))
+ if(ispath(MP, /mob/living/simple_animal/pet/corgi))
return 1
if(ispath(MP, /mob/living/simple_animal/crab))
return 1
@@ -461,11 +461,11 @@
return 1
if(ispath(MP, /mob/living/simple_animal/pony))
return 1
- if(ispath(MP, /mob/living/simple_animal/fox))
+ if(ispath(MP, /mob/living/simple_animal/pet/fox))
return 1
if(ispath(MP, /mob/living/simple_animal/chick))
return 1
- if(ispath(MP, /mob/living/simple_animal/pug))
+ if(ispath(MP, /mob/living/simple_animal/pet/pug))
return 1
if(ispath(MP, /mob/living/simple_animal/butterfly))
return 1
diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm
index e06ee2faa12..8a3b326c018 100644
--- a/code/modules/projectiles/projectile/magic.dm
+++ b/code/modules/projectiles/projectile/magic.dm
@@ -47,7 +47,7 @@
A.real_name = O.real_name
A.name = O.name
if(iscorgi(O))
- var/mob/living/simple_animal/corgi/C = O
+ var/mob/living/simple_animal/pet/corgi/C = O
if(C.inventory_head)
C.inventory_head.loc = C.loc
if(C.inventory_back)
@@ -194,15 +194,15 @@ proc/wabbajack(mob/living/M)
var/animal = pick("parrot","corgi","crab","pug","cat","tomato","mouse","chicken","cow","lizard","chick","fox")
switch(animal)
if("parrot") new_mob = new /mob/living/simple_animal/parrot(M.loc)
- if("corgi") new_mob = new /mob/living/simple_animal/corgi(M.loc)
+ if("corgi") new_mob = new /mob/living/simple_animal/pet/corgi(M.loc)
if("crab") new_mob = new /mob/living/simple_animal/crab(M.loc)
- if("cat") new_mob = new /mob/living/simple_animal/cat(M.loc)
+ if("cat") new_mob = new /mob/living/simple_animal/pet/cat(M.loc)
if("tomato") new_mob = new /mob/living/simple_animal/tomato(M.loc)
if("mouse") new_mob = new /mob/living/simple_animal/mouse(M.loc)
if("chicken") new_mob = new /mob/living/simple_animal/chicken(M.loc)
if("cow") new_mob = new /mob/living/simple_animal/cow(M.loc)
if("lizard") new_mob = new /mob/living/simple_animal/lizard(M.loc)
- if("fox") new_mob = new /mob/living/simple_animal/fox(M.loc)
+ if("fox") new_mob = new /mob/living/simple_animal/pet/fox(M.loc)
else new_mob = new /mob/living/simple_animal/chick(M.loc)
new_mob.universal_speak = 1
if("human")
diff --git a/code/modules/reagents/newchem/other.dm b/code/modules/reagents/newchem/other.dm
index 6012f1a4bbb..64f2fa56419 100644
--- a/code/modules/reagents/newchem/other.dm
+++ b/code/modules/reagents/newchem/other.dm
@@ -153,7 +153,7 @@ datum/reagent/corgium
/datum/chemical_reaction/corgium/on_reaction(var/datum/reagents/holder, var/created_volume)
var/location = get_turf(holder.my_atom)
- new /mob/living/simple_animal/corgi(location)
+ new /mob/living/simple_animal/pet/corgi(location)
..()
return
diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm
index c199844a083..a6ab71af272 100644
--- a/code/modules/reagents/reagent_containers/food/snacks.dm
+++ b/code/modules/reagents/reagent_containers/food/snacks.dm
@@ -243,7 +243,7 @@
if(bitecount >= 4)
M.visible_message("[M] [pick("burps from enjoyment", "yaps for more", "woofs twice", "looks at the area where \the [src] was")].","You swallow up the last part of \the [src].")
playsound(src.loc,'sound/items/eatfood.ogg', rand(10,50), 1)
- var/mob/living/simple_animal/corgi/C = M
+ var/mob/living/simple_animal/pet/corgi/C = M
if (C.health <= C.maxHealth + 5)
C.health += 5
else
diff --git a/code/modules/research/xenoarchaeology/artifact/artifact_autocloner.dm b/code/modules/research/xenoarchaeology/artifact/artifact_autocloner.dm
index 3242d7a73ef..8fb51c6f690 100644
--- a/code/modules/research/xenoarchaeology/artifact/artifact_autocloner.dm
+++ b/code/modules/research/xenoarchaeology/artifact/artifact_autocloner.dm
@@ -32,9 +32,9 @@
)
else
spawn_type = pick(\
- /mob/living/simple_animal/cat,\
- /mob/living/simple_animal/corgi,\
- /mob/living/simple_animal/corgi/puppy,\
+ /mob/living/simple_animal/pet/cat,\
+ /mob/living/simple_animal/pet/corgi,\
+ /mob/living/simple_animal/pet/corgi/puppy,\
/mob/living/simple_animal/chicken,\
/mob/living/simple_animal/cow,\
/mob/living/simple_animal/parrot,\
diff --git a/code/modules/store/items.dm b/code/modules/store/items.dm
index 39629f10131..0005b74fe9c 100644
--- a/code/modules/store/items.dm
+++ b/code/modules/store/items.dm
@@ -57,6 +57,12 @@
typepath = /obj/item/weapon/storage/box/dice
cost = 200
+/datum/storeitem/collar
+ name = "Pet Collar"
+ desc = "A box containing a pet collar; perfect for claiming a pet as your own personal accessory."
+ typepath = /obj/item/clothing/accessory/petcollar
+ cost = 350
+
/datum/storeitem/crayons
name = "Crayons"
desc = "Let security know how they're doing by scrawling lovenotes all over their hallways."
diff --git a/icons/mob/alienqueen.dmi b/icons/mob/alienqueen.dmi
new file mode 100644
index 00000000000..72449bc2ea7
Binary files /dev/null and b/icons/mob/alienqueen.dmi differ
diff --git a/icons/mob/animal.dmi b/icons/mob/animal.dmi
index ec772952a9c..2a5f2b10d94 100644
Binary files a/icons/mob/animal.dmi and b/icons/mob/animal.dmi differ
diff --git a/icons/mob/corgi_back.dmi b/icons/mob/corgi_back.dmi
index 81626df0333..657a7c01a54 100644
Binary files a/icons/mob/corgi_back.dmi and b/icons/mob/corgi_back.dmi differ
diff --git a/icons/mob/corgi_head.dmi b/icons/mob/corgi_head.dmi
index f158d1bd160..2a7e92f3fcb 100644
Binary files a/icons/mob/corgi_head.dmi and b/icons/mob/corgi_head.dmi differ
diff --git a/icons/mob/pets.dmi b/icons/mob/pets.dmi
new file mode 100644
index 00000000000..8a14c1e3602
Binary files /dev/null and b/icons/mob/pets.dmi differ
diff --git a/icons/mob/ties.dmi b/icons/mob/ties.dmi
index 513a38421e6..50c3e562887 100644
Binary files a/icons/mob/ties.dmi and b/icons/mob/ties.dmi differ
diff --git a/icons/obj/clothing/ties.dmi b/icons/obj/clothing/ties.dmi
index 1c1bbdf449f..a92834cb159 100644
Binary files a/icons/obj/clothing/ties.dmi and b/icons/obj/clothing/ties.dmi differ
diff --git a/paradise.dme b/paradise.dme
index 7d95b27c84f..f56e10807d7 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -1402,6 +1402,7 @@
#include "code\modules\mob\living\simple_animal\friendly\fox.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\pet.dm"
#include "code\modules\mob\living\simple_animal\friendly\pug.dm"
#include "code\modules\mob\living\simple_animal\friendly\slime.dm"
#include "code\modules\mob\living\simple_animal\friendly\spiderbot.dm"