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 = "
Inventory of [real_name]

" + var/dat = "

Inventory of [name]

" 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"