diff --git a/_maps/map_files/Pahrump-AB/Pahrump-AB.dmm b/_maps/map_files/Pahrump-AB/Pahrump-AB.dmm
index 8ca7dab189d..30dae64a69c 100644
--- a/_maps/map_files/Pahrump-AB/Pahrump-AB.dmm
+++ b/_maps/map_files/Pahrump-AB/Pahrump-AB.dmm
@@ -8227,6 +8227,10 @@
},
/turf/open/floor/f13/wood,
/area/f13/village)
+"aGe" = (
+/mob/living/simple_animal/hostile/eyebot/virtual,
+/turf/open/floor/plasteel/f13/vault_floor/misc/vaultrust,
+/area/f13/brotherhood)
"aGf" = (
/obj/effect/landmark/start/f13/wastelander,
/turf/open/floor/f13{
@@ -11010,6 +11014,13 @@
icon_state = "greenrustychess"
},
/area/f13/building/massfusion)
+"aPD" = (
+/obj/effect/turf_decal/gravel_edge{
+ dir = 8
+ },
+/obj/structure/fence,
+/turf/open/indestructible/ground/outside/dirt,
+/area/f13/wasteland)
"aPF" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/gallow,
@@ -17278,6 +17289,7 @@
/area/f13/wasteland)
"bAT" = (
/obj/effect/decal/cleanable/insectguts,
+/mob/living/simple_animal/hostile/retaliate/tamedradroach,
/turf/open/indestructible/ground/outside/sidewalk,
/area/f13/wasteland)
"bAV" = (
@@ -18877,6 +18889,11 @@
},
/turf/open/floor/plating/f13/inside,
/area/f13/brotherhood)
+"cfJ" = (
+/obj/structure/chair/stool/retro/tan,
+/mob/living/simple_animal/hostile/retaliate/tamedradroach,
+/turf/open/indestructible/ground/outside/sidewalk,
+/area/f13/wasteland)
"cfT" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
@@ -20519,6 +20536,11 @@
icon_state = "darkdirty"
},
/area/f13/ncr)
+"cuL" = (
+/obj/item/melee/onehanded/dogwhip,
+/obj/item/melee/onehanded/dogprod,
+/turf/open/indestructible/ground/outside/dirt,
+/area/f13/radiation)
"cuU" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
@@ -22063,6 +22085,7 @@
/area/f13/building)
"deB" = (
/obj/effect/decal/cleanable/blood/gibs/human/body,
+/mob/living/simple_animal/hostile/retaliate/tamedradroach,
/turf/open/indestructible/ground/outside/sidewalk,
/area/f13/wasteland)
"deG" = (
@@ -24997,6 +25020,10 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plasteel/f13/vault_floor/dark/darksolid,
/area/f13/building)
+"ept" = (
+/obj/structure/sign/poster/contraband/tools,
+/turf/closed/wall/mineral/concrete,
+/area/f13/brotherhood)
"epF" = (
/obj/structure/flora/grass/wasteland{
icon_state = "tall_grass_3"
@@ -28355,6 +28382,10 @@
},
/turf/open/indestructible/ground/outside/dirt,
/area/f13/radiation)
+"fDP" = (
+/mob/living/simple_animal/cow/brahmin/rochelle/roachmother,
+/turf/open/indestructible/ground/outside/sidewalk,
+/area/f13/wasteland)
"fDS" = (
/obj/machinery/light/fo13colored/Pink,
/obj/effect/decal/cleanable/dirt,
@@ -33673,6 +33704,11 @@
icon_state = "bluedirtychess2"
},
/area/f13/building)
+"hRV" = (
+/obj/effect/decal/cleanable/dirt,
+/mob/living/simple_animal/hostile/retaliate/tamedradroach,
+/turf/open/indestructible/ground/outside/sidewalk,
+/area/f13/wasteland)
"hRX" = (
/obj/item/wrench,
/obj/effect/decal/cleanable/dirt,
@@ -35459,6 +35495,13 @@
icon_state = "desertsmooth2"
},
/area/f13/wasteland)
+"iAV" = (
+/mob/living/simple_animal/hostile/retaliate/legionhound,
+/turf/open/indestructible/ground/outside/desert/sonora{
+ dir = 4;
+ icon_state = "desertsmooth1"
+ },
+/area/f13/wasteland)
"iAZ" = (
/obj/structure/chair/f13foldupchair{
dir = 8
@@ -35562,6 +35605,7 @@
/area/f13/building)
"iCZ" = (
/obj/effect/decal/cleanable/generic,
+/obj/structure/fence/corner,
/turf/open/indestructible/ground/outside/sidewalk{
icon_state = "horizontaltopbordertop0"
},
@@ -38864,6 +38908,11 @@
},
/turf/open/floor/plasteel/f13/vault_floor/misc/rarewhite/rarecyan,
/area/f13/building)
+"jVV" = (
+/mob/living/simple_animal/cow/brahmin/camilla,
+/obj/structure/bed/dogbed,
+/turf/open/indestructible/ground/outside/dirt,
+/area/f13/radiation)
"jWa" = (
/obj/effect/decal/marking{
icon_state = "doublehorizontal"
@@ -39939,6 +39988,13 @@
icon_state = "outerborder"
},
/area/f13/wasteland)
+"kuz" = (
+/obj/effect/turf_decal/gravel_edge{
+ dir = 8
+ },
+/obj/structure/fence/corner,
+/turf/open/indestructible/ground/outside/dirt,
+/area/f13/wasteland)
"kuF" = (
/obj/structure/table,
/obj/item/folder{
@@ -41580,6 +41636,13 @@
},
/turf/open/indestructible/ground/outside/water,
/area/f13/wasteland)
+"lbI" = (
+/mob/living/simple_animal/cow/brahmin/Vita,
+/turf/open/indestructible/ground/outside/desert/sonora{
+ dir = 4;
+ icon_state = "desertsmooth1"
+ },
+/area/f13/wasteland)
"lbR" = (
/obj/structure/destructible/tribal_torch/wall/lit{
dir = 8
@@ -43562,6 +43625,10 @@
icon_state = "outerpavementcorner"
},
/area/f13/wasteland)
+"lTy" = (
+/mob/living/simple_animal/hostile/retaliate/legionstalker,
+/turf/open/indestructible/ground/inside/mountain,
+/area/f13/caves)
"lTE" = (
/obj/structure/barricade/wooden/strong,
/turf/closed/wall/mineral/concrete,
@@ -44209,6 +44276,8 @@
"mfG" = (
/obj/structure/table/wood/junk,
/obj/item/ammo_box/magazine/zipgun,
+/obj/item/melee/onehanded/dogwhip,
+/obj/item/melee/onehanded/dogprod,
/turf/open/indestructible/ground/outside/sidewalk,
/area/f13/wasteland)
"mfI" = (
@@ -44995,6 +45064,9 @@
/area/f13/wasteland)
"mtG" = (
/obj/effect/decal/cleanable/robot_debris/gib,
+/obj/structure/fence{
+ dir = 4
+ },
/turf/open/indestructible/ground/outside/sidewalk{
icon_state = "horizontaltopbordertop0"
},
@@ -45458,6 +45530,11 @@
icon_state = "floorrusty"
},
/area/f13/building/mall)
+"mFe" = (
+/obj/effect/decal/cleanable/blood,
+/obj/structure/reagent_dispensers/barrel/dangerous,
+/turf/open/indestructible/ground/outside/dirt,
+/area/f13/radiation)
"mFl" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
@@ -48439,6 +48516,7 @@
/area/f13/wasteland)
"nRe" = (
/obj/item/trash/candy,
+/mob/living/simple_animal/cow/brahmin/rochelle/roachmother,
/turf/open/indestructible/ground/outside/sidewalk,
/area/f13/wasteland)
"nRn" = (
@@ -51305,6 +51383,12 @@
icon_state = "floorrusty"
},
/area/f13/building/mall)
+"oXr" = (
+/obj/structure/barricade/wooden/strong,
+/turf/open/indestructible/ground/outside/sidewalk{
+ icon_state = "horizontaltopbordertop0"
+ },
+/area/f13/wasteland)
"oXz" = (
/obj/item/trash/sosjerky,
/obj/effect/decal/cleanable/dirt/dust,
@@ -54500,6 +54584,10 @@
icon_state = "floorrusty"
},
/area/f13/building)
+"qjV" = (
+/mob/living/simple_animal/hostile/retaliate/tamedradroach,
+/turf/open/indestructible/ground/outside/sidewalk,
+/area/f13/wasteland)
"qkn" = (
/obj/machinery/light/broken,
/obj/effect/decal/cleanable/dirt/dust,
@@ -55227,6 +55315,11 @@
icon_state = "horizontaloutermain0"
},
/area/f13/wasteland)
+"qAO" = (
+/mob/living/simple_animal/cow/brahmin/mary,
+/obj/structure/bed/dogbed,
+/turf/open/indestructible/ground/outside/dirt,
+/area/f13/caves)
"qAT" = (
/obj/machinery/door/unpowered/secure_steeldoor{
req_access_txt = "281";
@@ -55656,6 +55749,10 @@
},
/turf/open/floor/plasteel/f13/vault_floor/misc/vaultrust,
/area/f13/brotherhood)
+"qMn" = (
+/obj/structure/sign/poster/contraband/hacking_guide,
+/turf/closed/wall/mineral/concrete,
+/area/f13/brotherhood)
"qMp" = (
/obj/structure/flora/ausbushes/sparsegrass,
/obj/structure/flora/grass/coyote/one,
@@ -57835,6 +57932,11 @@
/obj/machinery/chem_heater,
/turf/open/floor/plasteel/f13/vault_floor/white,
/area/f13/building/hospital)
+"rMf" = (
+/obj/effect/decal/remains/human,
+/mob/living/simple_animal/cow/brahmin/Ronda,
+/turf/open/indestructible/ground/inside/mountain,
+/area/f13/caves)
"rMj" = (
/obj/structure/reagent_dispensers/rainwater_tank,
/obj/effect/turf_decal/shadow/floor,
@@ -59614,6 +59716,11 @@
},
/turf/open/floor/f13/wood,
/area/f13/city)
+"szZ" = (
+/mob/living/simple_animal/cow/brahmin/luna,
+/obj/structure/bed/dogbed,
+/turf/open/indestructible/ground/outside/dirt,
+/area/f13/caves)
"sAd" = (
/obj/effect/decal/waste{
icon_state = "goo12"
@@ -59854,6 +59961,15 @@
icon_state = "horizontalinnermain0"
},
/area/f13/wasteland)
+"sFt" = (
+/obj/effect/turf_decal/gravel_edge{
+ dir = 8
+ },
+/obj/structure/fence/door{
+ dir = 4
+ },
+/turf/open/indestructible/ground/outside/dirt,
+/area/f13/wasteland)
"sFx" = (
/obj/item/candle/tribal_torch{
lit = 1
@@ -60502,6 +60618,14 @@
icon_state = "horizontaltopborderbottom0"
},
/area/f13/wasteland)
+"sWg" = (
+/obj/structure/fence{
+ dir = 4
+ },
+/turf/open/indestructible/ground/outside/sidewalk{
+ icon_state = "horizontaltopbordertop0"
+ },
+/area/f13/wasteland)
"sWj" = (
/obj/effect/turf_decal/weather/dirt,
/turf/open/indestructible/ground/outside/graveldirt,
@@ -62732,6 +62856,12 @@
},
/turf/open/indestructible/ground/outside/desert,
/area/f13/radiation)
+"tOr" = (
+/obj/structure/closet,
+/obj/item/melee/onehanded/dogwhip,
+/obj/item/melee/onehanded/dogprod,
+/turf/open/indestructible/ground/outside/dirt,
+/area/f13/wasteland)
"tOC" = (
/obj/structure/flora/tallgrass9,
/turf/open/indestructible/ground/outside/water,
@@ -63916,6 +64046,11 @@
icon_state = "darkrusty"
},
/area/f13/village)
+"uoI" = (
+/mob/living/simple_animal/cow/brahmin/abigail,
+/obj/structure/bed/dogbed,
+/turf/open/indestructible/ground/outside/dirt,
+/area/f13/caves)
"uoJ" = (
/obj/effect/turf_decal/shadow,
/turf/open/indestructible/ground/inside/dirt/stamped/outside/sand{
@@ -63983,6 +64118,10 @@
icon_state = "verticalrightborderright0"
},
/area/f13/wasteland)
+"uqd" = (
+/mob/living/simple_animal/hostile/eyebot/virtual/floatingeye,
+/turf/open/floor/plasteel/f13/vault_floor/misc/vaultrust,
+/area/f13/brotherhood)
"uqw" = (
/obj/structure/table/wood,
/obj/item/crafting/abraxo,
@@ -64478,6 +64617,10 @@
icon_state = "horizontalbottombordertop2"
},
/area/f13/wasteland)
+"uBP" = (
+/obj/structure/sign/poster/prewar/protectron,
+/turf/closed/wall/mineral/concrete,
+/area/f13/brotherhood)
"uBQ" = (
/obj/structure/flora/grass/wasteland{
icon_state = "tall_grass_3"
@@ -65159,7 +65302,11 @@
/turf/open/indestructible/ground/outside/sidewalk,
/area/f13/wasteland)
"uPo" = (
-/obj/item/trash/f13/borscht,
+/obj/machinery/door/unpowered/securedoor{
+ max_integrity = 300;
+ obj_integrity = 300;
+ req_access_txt = "273"
+ },
/turf/open/indestructible/ground/outside/sidewalk{
icon_state = "horizontaltopbordertop0"
},
@@ -65395,6 +65542,11 @@
/obj/structure/flora/ausbushes/reedbush,
/turf/open/indestructible/ground/outside/water,
/area/f13/wasteland)
+"uUM" = (
+/obj/machinery/computer/eyebots,
+/obj/structure/table,
+/turf/open/floor/plasteel/f13/vault_floor/misc/vaultrust,
+/area/f13/brotherhood)
"uUO" = (
/obj/effect/spawner/lootdrop/low_tools,
/obj/effect/decal/cleanable/dirt,
@@ -65983,6 +66135,10 @@
},
/turf/open/indestructible/ground/outside/road,
/area/f13/building)
+"vhD" = (
+/mob/living/simple_animal/cow/brahmin/Valeria,
+/turf/open/indestructible/ground/outside/desert/sonora/coarse,
+/area/f13/wasteland)
"vhS" = (
/obj/machinery/light,
/turf/open/floor/plasteel/f13{
@@ -66850,6 +67006,10 @@
icon_state = "floorrusty"
},
/area/f13/city)
+"vzh" = (
+/mob/living/simple_animal/hostile/retaliate/ncrguarddog,
+/turf/open/indestructible/ground/outside/dirt,
+/area/f13/caves)
"vzm" = (
/obj/effect/decal/riverbank,
/obj/effect/turf_decal/weather/dirt{
@@ -66958,6 +67118,11 @@
},
/turf/open/indestructible/ground/outside/savannah/topcenter,
/area/f13/wasteland)
+"vBA" = (
+/obj/structure/table,
+/obj/item/reagent_containers/food/drinks/soda_cans/monkey_energy,
+/turf/open/floor/plasteel/f13/vault_floor/misc/vaultrust,
+/area/f13/brotherhood)
"vBB" = (
/obj/effect/turf_decal/weather/dirt{
dir = 8
@@ -67365,6 +67530,10 @@
name = "rocky dirt"
},
/area/f13/wasteland)
+"vLJ" = (
+/mob/living/simple_animal/hostile/retaliate/ncrattackdog,
+/turf/open/indestructible/ground/outside/dirt,
+/area/f13/caves)
"vMk" = (
/obj/structure/flora/grass/wasteland{
icon_state = "tall_grass_3"
@@ -67966,6 +68135,12 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/indestructible/ground/outside/desert,
/area/f13/wasteland)
+"vZq" = (
+/obj/structure/chair/comfy{
+ dir = 4
+ },
+/turf/open/floor/plasteel/f13/vault_floor/misc/vaultrust,
+/area/f13/brotherhood)
"vZv" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/flora/grass/wasteland{
@@ -68876,6 +69051,8 @@
/obj/effect/decal/cleanable/dirt,
/obj/structure/rack,
/obj/item/circuitboard/machine/colormate,
+/obj/item/melee/onehanded/dogprod,
+/obj/item/melee/onehanded/dogwhip,
/turf/open/floor/wood_fancy,
/area/f13/legion)
"wtJ" = (
@@ -70312,6 +70489,11 @@
icon_state = "desertsmooth4"
},
/area/f13/wasteland)
+"wYq" = (
+/obj/effect/decal/remains/human,
+/mob/living/simple_animal/hostile/retaliate/tamedcentaur,
+/turf/open/indestructible/ground/outside/dirt,
+/area/f13/radiation)
"wYt" = (
/obj/structure/flora/ausbushes/sparsegrass,
/obj/structure/flora/ausbushes/sparsegrass,
@@ -71694,6 +71876,17 @@
icon_state = "redrustyfull"
},
/area/f13/building/firestation)
+"xAC" = (
+/obj/machinery/light/small{
+ dir = 4;
+ light_color = "red"
+ },
+/obj/structure/closet/fridge,
+/obj/item/reagent_containers/food/drinks/soda_cans/grey_bull,
+/obj/item/reagent_containers/food/drinks/soda_cans/pwr_game,
+/obj/item/reagent_containers/glass/beaker/waterbottle,
+/turf/open/floor/plasteel/f13/vault_floor/misc/vaultrust,
+/area/f13/brotherhood)
"xAG" = (
/obj/structure/curtain,
/obj/effect/decal/cleanable/dirt{
@@ -71888,6 +72081,10 @@
},
/turf/open/floor/plasteel/f13/vault_floor/red/white,
/area/f13/building/mall)
+"xDK" = (
+/mob/living/simple_animal/hostile/retaliate/legionhound,
+/turf/open/indestructible/ground/outside/desert/sonora/coarse,
+/area/f13/wasteland)
"xDZ" = (
/obj/structure/table/wood,
/obj/item/kitchen/knife{
@@ -72924,6 +73121,10 @@
icon_state = "desertcracked3"
},
/area/f13/wasteland)
+"ybB" = (
+/mob/living/simple_animal/cow/brahmin/rochelle,
+/turf/open/indestructible/ground/outside/sidewalk,
+/area/f13/wasteland)
"ybI" = (
/obj/structure/flora/grass/coyote/two,
/turf/open/indestructible/ground/outside/desert,
@@ -73706,10 +73907,10 @@ aae
aae
aae
aae
-aae
-aae
-aae
-aae
+szZ
+aJN
+aJN
+qAO
kGV
pxI
aon
@@ -73962,11 +74163,11 @@ aae
aae
aae
aae
-aae
-aae
-aae
-aae
-aae
+aJN
+aJN
+aJN
+aJN
+aJN
aoo
aoo
aoo
@@ -74218,12 +74419,12 @@ aae
aae
aae
aae
-aae
-aae
-aae
-aae
-aae
-aae
+uoI
+aJN
+aJN
+aJN
+vzh
+aJN
aoo
aoo
aoo
@@ -74476,11 +74677,11 @@ aae
aae
aae
aae
-aae
-aae
-aae
-aae
-aae
+vLJ
+aJN
+aJN
+vzh
+aJN
aoo
vLk
ugE
@@ -74733,11 +74934,11 @@ aae
aae
aOk
aTo
-aOk
-aae
-aae
-aae
-aae
+tPB
+aJN
+aJN
+aJN
+aJN
aon
bzg
uyY
@@ -74990,11 +75191,11 @@ aOk
aOk
aOk
lWu
-aOk
-aOk
-aae
-aae
-aae
+tPB
+tOr
+aJN
+aJN
+aJN
aoo
cjh
cjh
@@ -75247,11 +75448,11 @@ gBs
gBs
tTO
mMc
-gBs
-gBs
-gBs
-gBs
-aOk
+kuz
+aPD
+sFt
+aPD
+ans
kGV
otl
otl
@@ -81272,10 +81473,10 @@ bGM
koF
koF
rac
-usN
-hiX
+wYq
hiX
hiX
+jVV
bmR
koF
koF
@@ -81786,7 +81987,7 @@ lCY
vWJ
asW
utG
-hiX
+hjh
hiX
hiX
hiX
@@ -82043,9 +82244,9 @@ hiX
nLB
bGM
cId
-pAh
-hiX
-hiX
+mFe
+hjh
+cuL
usN
bmR
teZ
@@ -94368,10 +94569,10 @@ jeh
gFA
dVU
iht
-ean
+fDP
oAg
hTg
-ean
+ybB
aQZ
qWd
tRk
@@ -94626,7 +94827,7 @@ dHk
ecb
iht
nHV
-ean
+fDP
ean
opE
aQZ
@@ -94883,10 +95084,10 @@ bcw
edG
iht
mfG
-ean
+fDP
rbn
pBw
-aQZ
+oXr
dkx
tzr
gnd
@@ -95141,7 +95342,7 @@ jeh
iht
iNW
kZO
-aum
+hRV
ean
mtG
mHp
@@ -95398,9 +95599,9 @@ nuJ
iht
nxy
eCB
+hRV
aum
-aum
-aQZ
+sWg
xnZ
eJO
eJO
@@ -95654,8 +95855,8 @@ oXV
uef
iht
wwW
-kZO
-ean
+cfJ
+qjV
ean
uPo
sVY
@@ -95911,10 +96112,10 @@ jeh
jeh
iht
reV
-ean
+qjV
bAT
vSc
-aQZ
+uPo
mHp
pjF
igF
@@ -96169,9 +96370,9 @@ uef
iht
reV
deB
-ean
+qjV
deB
-aQZ
+sWg
mHp
eJO
eJO
@@ -96427,8 +96628,8 @@ iht
txv
ean
ieK
-ean
-aQZ
+qjV
+sWg
mHp
kCd
igF
@@ -114794,7 +114995,7 @@ aaa
(162,1,1) = {"
aaa
pxe
-oYF
+aGe
oYF
oYF
oYF
@@ -115051,7 +115252,7 @@ aaa
(163,1,1) = {"
aaa
pxe
-oYF
+uqd
oYF
oYF
oYF
@@ -116597,7 +116798,7 @@ oYF
oYF
gnj
gnj
-oYF
+vZq
pxe
aae
vGl
@@ -116852,9 +117053,9 @@ aaa
pxe
oYF
oYF
-tMb
-oYF
-oYF
+xAC
+vBA
+uUM
pxe
aae
aae
@@ -117109,9 +117310,9 @@ aaa
pxe
pxe
pxe
-pxe
-pxe
-pxe
+qMn
+uBP
+ept
pxe
aaa
aaa
@@ -135839,7 +136040,7 @@ hrE
ccj
ccj
ccj
-sWC
+vhD
sVE
ccj
ccj
@@ -136094,9 +136295,9 @@ sMp
wtI
hrE
sVE
-sWC
+xDK
izz
-ccj
+lbI
fPm
fnz
ccj
@@ -136608,7 +136809,7 @@ sMp
vvC
hrE
ccj
-ccj
+iAV
xJd
sWC
sVE
@@ -136867,9 +137068,9 @@ gvW
dJF
oDu
ccj
-ccj
+iAV
sWC
-ccj
+iAV
vNP
eov
aqx
@@ -137902,7 +138103,7 @@ aaB
aaB
aaB
vGl
-aaB
+lTy
qET
aae
aae
@@ -138159,7 +138360,7 @@ aaB
aaB
aaB
aaB
-rNB
+rMf
aaB
vGl
aae
diff --git a/code/datums/components/crafting/recipes/recipes_assemblies.dm b/code/datums/components/crafting/recipes/recipes_assemblies.dm
index c11bfd2ba1f..553d0b54b33 100644
--- a/code/datums/components/crafting/recipes/recipes_assemblies.dm
+++ b/code/datums/components/crafting/recipes/recipes_assemblies.dm
@@ -12,6 +12,30 @@
subcategory = CAT_MISCELLANEOUS
category = CAT_MISC
+/datum/crafting_recipe/boseyebot
+ name = "Brotherhood Eyebot"
+ result = /mob/living/simple_animal/hostile/eyebot/virtual
+ reqs = list(/obj/item/stack/crafting/electronicparts = 25,
+ /obj/item/stack/crafting/metalparts = 20,
+ /obj/item/stack/crafting/goodparts = 15)
+ tools = list(TOOL_WORKBENCH)
+ time = 60
+ subcategory = CAT_MISCELLANEOUS
+ category = CAT_MISC
+ always_available = FALSE
+
+/datum/crafting_recipe/bosfloat
+ name = "Brotherhood Floating Eyebot"
+ result = /mob/living/simple_animal/hostile/eyebot/virtual/floatingeye
+ reqs = list(/obj/item/stack/crafting/electronicparts = 30,
+ /obj/item/stack/crafting/metalparts = 25,
+ /obj/item/stack/crafting/goodparts = 20)
+ tools = list(TOOL_WORKBENCH)
+ time = 70
+ subcategory = CAT_MISCELLANEOUS
+ category = CAT_MISC
+ always_available = FALSE
+
/datum/crafting_recipe/trading_machine
name = "Vending machine"
result = /obj/machinery/trading_machine
diff --git a/code/datums/traits/good.dm b/code/datums/traits/good.dm
index d81589bce64..14eb2601f4e 100644
--- a/code/datums/traits/good.dm
+++ b/code/datums/traits/good.dm
@@ -1126,9 +1126,9 @@ GLOBAL_LIST_INIT(bone_dancer_recipes, list(
/datum/quirk/crittermaster
name = "Beast Master - Small Critters"
- desc = "Whenever by psychic means or not, you gained ability to control roaches, most geckos and molerats (last ones will be initially hostile and needs to be tamed).\
-
Taming will make them passive toward other players and tamed fauna. Young and adult nightstalkers can be also tamed, but not controlled."
- value = 4
+ desc = "Whenever by psychic means or not, you gained ability to control roaches, Bloatflies, Feral dogs, Geckos and molerats\
+
You will need to use your Cattle Prod to make them passive toward other players and tamed fauna, Young and adult nightstalkers can be also tamed, But adults not controlled, You can also use this to control Faction-Aligned Beasts, But only if you share said alignment"
+ value = 5
mob_trait = TRAIT_BEASTMASTER_SMALLCRITTER
gain_text = span_notice("You tapped to potentials of the critter horde!")
lose_text = span_danger("Small critters refuse to obey your commands now.")
@@ -1137,6 +1137,16 @@ GLOBAL_LIST_INIT(bone_dancer_recipes, list(
var/obj/effect/proc_holder/mob_common/summon_backup/beastmaster/small_critter/gather
var/obj/effect/proc_holder/mob_common/direct_mobs/beastmaster/small_critter/moveto
+/datum/quirk/crittermaster/on_spawn()
+ var/mob/living/carbon/human/H = quirk_holder
+ var/obj/item/melee/onehanded/dogwhip/dogwhip = new(get_turf(H))
+ H.put_in_hands(dogwhip)
+ H.equip_to_slot_if_possible(dogwhip, SLOT_IN_BACKPACK)
+ var/obj/item/melee/onehanded/dogprod/dogprod = new(get_turf(H))
+ H.put_in_hands(dogprod)
+ H.equip_to_slot_if_possible(dogprod, SLOT_IN_BACKPACK)
+ H.regenerate_icons()
+
/datum/quirk/crittermaster/add()
var/mob/living/carbon/human/H = quirk_holder
H.faction |= list("critter-friend")
diff --git a/code/game/objects/items/melee/f13onehanded.dm b/code/game/objects/items/melee/f13onehanded.dm
index eb17b0042f4..62375dc9255 100644
--- a/code/game/objects/items/melee/f13onehanded.dm
+++ b/code/game/objects/items/melee/f13onehanded.dm
@@ -664,6 +664,28 @@ obj/item/melee/onehanded/knife/switchblade
return
M.apply_damage(20, STAMINA, null, 0)
+/obj/item/melee/onehanded/dogwhip
+ name = "Dog whip"
+ desc = "Used to get beasts into action."
+ icon_state = "whip"
+ item_state = "chain"
+ force = 1
+ attack_verb = list("riled", "encouraged")
+ hitsound = 'sound/weapons/whip.ogg'
+
+/obj/item/melee/onehanded/dogprod
+ name = "Cattle prod"
+ desc = "Used to get beasts in line, Will make them hesitant until you encourage them again, Doesn't really work on people."
+ icon = 'icons/fallout/objects/melee/melee.dmi'
+ icon_state = "stunprod"
+ item_state = "stunprod"
+ force = 1
+ attack_verb = list("shocked", "zapped", "prodded")
+ hitsound = 'sound/weapons/egloves.ogg'
+ lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi'
+
+
///////////////////
// GLOVE WEAPONS //
/////////////////// -faster attack speed
diff --git a/code/modules/jobs/job_types/bos.dm b/code/modules/jobs/job_types/bos.dm
index 9511347b1b8..4fea7d1f706 100644
--- a/code/modules/jobs/job_types/bos.dm
+++ b/code/modules/jobs/job_types/bos.dm
@@ -546,6 +546,8 @@ Senior Scribe
if(visualsOnly)
return
H.mind.teach_crafting_recipe(GLOB.chemwhiz_recipes)
+ H.mind.teach_crafting_recipe(/datum/crafting_recipe/boseyebot)
+ H.mind.teach_crafting_recipe(/datum/crafting_recipe/bosfloat)
ADD_TRAIT(H, TRAIT_CHEMWHIZ, src)
ADD_TRAIT(H, TRAIT_SURGERY_HIGH, src)
ADD_TRAIT(H, TRAIT_CYBERNETICIST, src)
@@ -640,6 +642,8 @@ Scribe
if(visualsOnly)
return
H.mind.teach_crafting_recipe(GLOB.chemwhiz_recipes)
+ H.mind.teach_crafting_recipe(/datum/crafting_recipe/boseyebot)
+ H.mind.teach_crafting_recipe(/datum/crafting_recipe/bosfloat)
ADD_TRAIT(H, TRAIT_CHEMWHIZ, src)
ADD_TRAIT(H, TRAIT_SURGERY_HIGH, src)
ADD_TRAIT(H, TRAIT_CYBERNETICIST, src)
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 57ea9b269b3..cb0b0fe6976 100644
--- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
+++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
@@ -222,7 +222,7 @@
if(saddle || bridle)
. += "
Feeding this beast will let it move quickly for longer! You'll need to remove their bridle and saddle to get them pregnant."
else
- . += "
Feeding this beast will get it pregnant! You'll need to give them a bridle and/or a saddle to feed their hunger."
+ . += "
Feeding this beast will get it pregnant! You'll need to give them a bridle and/or a saddle to use them as a mount."
switch(hunger)
if(1)
. += "
They look well fed."
@@ -918,6 +918,528 @@
)
butcher_difficulty = 1
+/mob/living/simple_animal/cow/brahmin/Valeria
+ name = "Valeria"
+ desc = "Vita's older sister, Still has a lot of fight left in her."
+ icon = 'icons/fallout/mobs/animals/dogs.dmi'
+ icon_state = "legiondog"
+ icon_living = "legiondog"
+ icon_dead = "legiondog_dead"
+ icon_gib = "gib"
+ speak = list("*gnarl","*bark")
+ speak_emote = list("barks","growls")
+ emote_hear = list("perks its head up.")
+ emote_see = list("stares.")
+ speak_chance = 1
+ turns_per_move = 5
+ see_in_dark = 6
+ health = 90
+ maxHealth = 90
+ ride_move_delay = 1.8
+ can_ghost_into = FALSE
+ response_help_continuous = "pat"
+ response_help_simple = "pet"
+ response_disarm_continuous = "gently pushes aside"
+ response_disarm_simple = "gently push aside"
+ response_harm_continuous = "bites"
+ response_harm_simple = "bites"
+ attack_verb_continuous = "bites"
+ attack_verb_simple = "bite"
+ waddle_amount = 3
+ waddle_up_time = 1
+ waddle_side_time = 2
+ attack_sound = 'sound/weapons/punch1.ogg'
+ young_type = /mob/living/simple_animal/hostile/retaliate/legionhound
+ food_types = list(
+ /obj/item/reagent_containers/food/snacks/meat/slab,
+ /obj/item/reagent_containers/food/snacks/meat/slab/gecko,
+ /obj/item/reagent_containers/food/snacks/meat/slab/human,
+ /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant,
+ /obj/item/reagent_containers/food/snacks/meat/slab/chicken,
+ /obj/item/reagent_containers/food/snacks/meat/slab/molerat,
+ /obj/item/reagent_containers/food/snacks/meat/slab/mirelurk,
+ /obj/item/reagent_containers/food/snacks/meat/slab/ant_meat,
+ /obj/item/reagent_containers/food/snacks/meat/slab/fireant_meat,
+ /obj/item/reagent_containers/food/snacks/meat/slab/bloatfly_meat,
+ /obj/item/reagent_containers/food/snacks/meat/slab/radscorpion_meat,
+ /obj/item/reagent_containers/food/snacks/meat/slab/cazador_meat,
+ /obj/item/reagent_containers/food/snacks/f13/canned/dog
+ )
+ milk_reagent = /datum/reagent/toxin
+ ride_offsets = list(
+ "1" = list(15, 8),
+ "2" = list(15, 8),
+ "4" = list(15, 8),
+ "8" = list(15, 8)
+ )
+ guaranteed_butcher_results = list(
+ /obj/item/reagent_containers/food/snacks/meat/slab/wolf = 2,
+ /obj/item/stack/sheet/sinew = 2,
+ /obj/item/stack/sheet/bone = 2
+ )
+ butcher_results = list(
+ /obj/item/stack/sheet/animalhide/wolf = 1,
+ /obj/item/reagent_containers/food/snacks/meat/slab/wolf = 1
+ )
+ butcher_difficulty = 1
+
+/mob/living/simple_animal/cow/brahmin/Ronda
+ name = "Ronda"
+ desc = "A Young female nightstalker adopted by the legion, Has plenty of potential."
+ icon = 'icons/fallout/mobs/animals/nightstalker.dmi'
+ icon_state = "nightstalker-legion"
+ icon_living = "nightstalker-legion"
+ icon_dead = "nightstalker-legion-dead"
+ speak = list("*shiss","*gnarl","*bark")
+ speak_emote = list("barks","hisses")
+ emote_hear = list("perks its head up.")
+ emote_see = list("stares.")
+ speak_chance = 1
+ turns_per_move = -1 //no random movement
+ see_in_dark = 6
+ health = 120
+ maxHealth = 120
+ ride_move_delay = 1.8
+ can_ghost_into = FALSE
+ response_help_continuous = "pets"
+ response_help_simple = "pet"
+ response_disarm_continuous = "gently pushes aside"
+ response_disarm_simple = "gently push aside"
+ response_harm_continuous = "bites"
+ response_harm_simple = "bites"
+ attack_verb_continuous = "bites"
+ attack_verb_simple = "bite"
+ waddle_amount = 3
+ waddle_up_time = 1
+ waddle_side_time = 2
+ attack_sound = 'sound/weapons/punch1.ogg'
+ young_type = /mob/living/simple_animal/hostile/retaliate/legionstalker
+ food_types = list(
+ /obj/item/reagent_containers/food/snacks/meat/slab,
+ /obj/item/reagent_containers/food/snacks/meat/slab/gecko,
+ /obj/item/reagent_containers/food/snacks/meat/slab/human,
+ /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant,
+ /obj/item/reagent_containers/food/snacks/meat/slab/chicken,
+ /obj/item/reagent_containers/food/snacks/meat/slab/molerat,
+ /obj/item/reagent_containers/food/snacks/meat/slab/mirelurk,
+ /obj/item/reagent_containers/food/snacks/meat/slab/ant_meat,
+ /obj/item/reagent_containers/food/snacks/meat/slab/fireant_meat,
+ /obj/item/reagent_containers/food/snacks/meat/slab/bloatfly_meat,
+ /obj/item/reagent_containers/food/snacks/meat/slab/radscorpion_meat,
+ /obj/item/reagent_containers/food/snacks/meat/slab/cazador_meat,
+ /obj/item/reagent_containers/food/snacks/f13/canned/dog
+ )
+ milk_reagent = /datum/reagent/toxin
+ ride_offsets = list(
+ "1" = list(15, 8),
+ "2" = list(15, 8),
+ "4" = list(15, 8),
+ "8" = list(15, 8)
+ )
+ guaranteed_butcher_results = list(
+ /obj/item/reagent_containers/food/snacks/meat/slab/nightstalker_meat = 2,
+ /obj/item/stack/sheet/sinew = 2,
+ /obj/item/stack/sheet/bone = 2
+ )
+ butcher_results = list(
+ /obj/item/clothing/head/f13/stalkerpelt = 1,
+ /obj/item/reagent_containers/food/snacks/meat/slab/nightstalker_meat = 1
+ )
+ butcher_difficulty = 1
+
+/mob/living/simple_animal/cow/brahmin/Vita
+ name = "Vita"
+ desc = "The legion's premiere breeding hound, One tough bitch."
+ icon = 'icons/fallout/mobs/animals/dogs.dmi'
+ icon_state = "legiondog"
+ icon_living = "legiondog"
+ icon_dead = "legiondog_dead"
+ icon_gib = "gib"
+ speak = list("*gnarl","*bark")
+ speak_emote = list("barks","growls")
+ emote_hear = list("perks its head up.")
+ emote_see = list("stares.")
+ speak_chance = 1
+ turns_per_move = 2
+ see_in_dark = 4
+ health = 150
+ maxHealth = 150
+ ride_move_delay = 1.8
+ can_ghost_into = FALSE
+ response_help_continuous = "pat"
+ response_help_simple = "pet"
+ response_disarm_continuous = "gently pushes aside"
+ response_disarm_simple = "gently push aside"
+ response_harm_continuous = "bites"
+ response_harm_simple = "bites"
+ attack_verb_continuous = "bites"
+ attack_verb_simple = "bite"
+ waddle_amount = 3
+ waddle_up_time = 1
+ waddle_side_time = 2
+ attack_sound = 'sound/weapons/punch1.ogg'
+ young_type = /mob/living/simple_animal/hostile/retaliate/legionhound
+ food_types = list(
+ /obj/item/reagent_containers/food/snacks/meat/slab,
+ /obj/item/reagent_containers/food/snacks/meat/slab/gecko,
+ /obj/item/reagent_containers/food/snacks/meat/slab/human,
+ /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant,
+ /obj/item/reagent_containers/food/snacks/meat/slab/chicken,
+ /obj/item/reagent_containers/food/snacks/meat/slab/molerat,
+ /obj/item/reagent_containers/food/snacks/meat/slab/mirelurk,
+ /obj/item/reagent_containers/food/snacks/meat/slab/ant_meat,
+ /obj/item/reagent_containers/food/snacks/meat/slab/fireant_meat,
+ /obj/item/reagent_containers/food/snacks/meat/slab/bloatfly_meat,
+ /obj/item/reagent_containers/food/snacks/meat/slab/radscorpion_meat,
+ /obj/item/reagent_containers/food/snacks/meat/slab/cazador_meat,
+ /obj/item/reagent_containers/food/snacks/f13/canned/dog
+ )
+ milk_reagent = /datum/reagent/toxin
+ ride_offsets = list(
+ "1" = list(15, 8),
+ "2" = list(15, 8),
+ "4" = list(15, 8),
+ "8" = list(15, 8)
+ )
+ guaranteed_butcher_results = list(
+ /obj/item/reagent_containers/food/snacks/meat/slab/wolf = 2,
+ /obj/item/stack/sheet/sinew = 2,
+ /obj/item/stack/sheet/bone = 2
+ )
+ butcher_results = list(
+ /obj/item/stack/sheet/animalhide/wolf = 1,
+ /obj/item/reagent_containers/food/snacks/meat/slab/wolf = 1
+ )
+ butcher_difficulty = 1
+
+/mob/living/simple_animal/cow/brahmin/mary
+ name = "Mary"
+ desc = "A retired guard dog, Now helps the army by making more like herself."
+ icon = 'icons/fallout/mobs/animals/dogs.dmi'
+ icon_state = "tippen"
+ icon_living = "tippen"
+ icon_dead = "tippen_dead"
+ icon_gib = "gib"
+ speak = list("*gnarl","*bark")
+ speak_emote = list("barks","growls")
+ emote_hear = list("perks its head up.")
+ emote_see = list("stares.")
+ speak_chance = 1
+ turns_per_move = -1
+ see_in_dark = 6
+ health = 60
+ maxHealth = 60
+ ride_move_delay = 1.8
+ can_ghost_into = FALSE
+ response_help_continuous = "pat"
+ response_help_simple = "pet"
+ response_disarm_continuous = "gently pushes aside"
+ response_disarm_simple = "gently push aside"
+ response_harm_continuous = "bites"
+ response_harm_simple = "bites"
+ attack_verb_continuous = "bites"
+ attack_verb_simple = "bite"
+ waddle_amount = 3
+ waddle_up_time = 1
+ waddle_side_time = 2
+ attack_sound = 'sound/weapons/punch1.ogg'
+ young_type = /mob/living/simple_animal/hostile/retaliate/ncrguarddog
+ food_types = list(
+ /obj/item/reagent_containers/food/snacks/meat/slab,
+ /obj/item/reagent_containers/food/snacks/meat/slab/gecko,
+ /obj/item/reagent_containers/food/snacks/meat/slab/human,
+ /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant,
+ /obj/item/reagent_containers/food/snacks/meat/slab/chicken,
+ /obj/item/reagent_containers/food/snacks/meat/slab/molerat,
+ /obj/item/reagent_containers/food/snacks/meat/slab/mirelurk,
+ /obj/item/reagent_containers/food/snacks/meat/slab/ant_meat,
+ /obj/item/reagent_containers/food/snacks/meat/slab/fireant_meat,
+ /obj/item/reagent_containers/food/snacks/meat/slab/bloatfly_meat,
+ /obj/item/reagent_containers/food/snacks/meat/slab/radscorpion_meat,
+ /obj/item/reagent_containers/food/snacks/meat/slab/cazador_meat,
+ /obj/item/reagent_containers/food/snacks/f13/canned/dog
+ )
+ milk_reagent = /datum/reagent/toxin
+ ride_offsets = list(
+ "1" = list(15, 8),
+ "2" = list(15, 8),
+ "4" = list(15, 8),
+ "8" = list(15, 8)
+ )
+ guaranteed_butcher_results = list(
+ /obj/item/reagent_containers/food/snacks/meat/slab/wolf = 2,
+ /obj/item/stack/sheet/sinew = 2,
+ /obj/item/stack/sheet/bone = 2
+ )
+ butcher_results = list(
+ /obj/item/stack/sheet/animalhide/wolf = 1,
+ /obj/item/reagent_containers/food/snacks/meat/slab/wolf = 1
+ )
+ butcher_difficulty = 1
+
+/mob/living/simple_animal/cow/brahmin/luna
+ name = "Luna"
+ desc = "One of the NCRA's most capable breeding dogs, Mother of many decorated guard dogs."
+ icon = 'icons/fallout/mobs/animals/dogs.dmi'
+ icon_state = "tippen"
+ icon_living = "tippen"
+ icon_dead = "tippen_dead"
+ icon_gib = "gib"
+ speak = list("*gnarl","*bark")
+ speak_emote = list("barks","growls")
+ emote_hear = list("perks its head up.")
+ emote_see = list("stares.")
+ speak_chance = 1
+ turns_per_move = 4
+ see_in_dark = 6
+ health = 70
+ maxHealth = 70
+ ride_move_delay = 1.8
+ can_ghost_into = FALSE
+ response_help_continuous = "pat"
+ response_help_simple = "pet"
+ response_disarm_continuous = "gently pushes aside"
+ response_disarm_simple = "gently push aside"
+ response_harm_continuous = "bites"
+ response_harm_simple = "bites"
+ attack_verb_continuous = "bites"
+ attack_verb_simple = "bite"
+ waddle_amount = 3
+ waddle_up_time = 1
+ waddle_side_time = 2
+ attack_sound = 'sound/weapons/punch1.ogg'
+ young_type = /mob/living/simple_animal/hostile/retaliate/ncrguarddog
+ food_types = list(
+ /obj/item/reagent_containers/food/snacks/meat/slab,
+ /obj/item/reagent_containers/food/snacks/meat/slab/gecko,
+ /obj/item/reagent_containers/food/snacks/meat/slab/human,
+ /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant,
+ /obj/item/reagent_containers/food/snacks/meat/slab/chicken,
+ /obj/item/reagent_containers/food/snacks/meat/slab/molerat,
+ /obj/item/reagent_containers/food/snacks/meat/slab/mirelurk,
+ /obj/item/reagent_containers/food/snacks/meat/slab/ant_meat,
+ /obj/item/reagent_containers/food/snacks/meat/slab/fireant_meat,
+ /obj/item/reagent_containers/food/snacks/meat/slab/bloatfly_meat,
+ /obj/item/reagent_containers/food/snacks/meat/slab/radscorpion_meat,
+ /obj/item/reagent_containers/food/snacks/meat/slab/cazador_meat,
+ /obj/item/reagent_containers/food/snacks/f13/canned/dog
+ )
+ milk_reagent = /datum/reagent/toxin
+ ride_offsets = list(
+ "1" = list(15, 8),
+ "2" = list(15, 8),
+ "4" = list(15, 8),
+ "8" = list(15, 8)
+ )
+ guaranteed_butcher_results = list(
+ /obj/item/reagent_containers/food/snacks/meat/slab/wolf = 2,
+ /obj/item/stack/sheet/sinew = 2,
+ /obj/item/stack/sheet/bone = 2
+ )
+ butcher_results = list(
+ /obj/item/stack/sheet/animalhide/wolf = 1,
+ /obj/item/reagent_containers/food/snacks/meat/slab/wolf = 1
+ )
+ butcher_difficulty = 1
+
+/mob/living/simple_animal/cow/brahmin/abigail
+ name = "Abigail"
+ desc = "The ranger's one and only sweetheart, The toughest bitch you'll ever see."
+ icon = 'icons/fallout/mobs/animals/dogs.dmi'
+ icon_state = "shepherd"
+ icon_living = "shepherd"
+ icon_dead = "shepherd_dead"
+ icon_gib = "gib"
+ speak = list("*gnarl","*bark")
+ speak_emote = list("barks","growls")
+ emote_hear = list("perks its head up.")
+ emote_see = list("stares.")
+ speak_chance = 1
+ turns_per_move = 5
+ see_in_dark = 6
+ health = 200
+ maxHealth = 200
+ ride_move_delay = 1.8
+ can_ghost_into = FALSE
+ response_help_continuous = "pat"
+ response_help_simple = "pet"
+ response_disarm_continuous = "gently pushes aside"
+ response_disarm_simple = "gently push aside"
+ response_harm_continuous = "bites"
+ response_harm_simple = "bites"
+ attack_verb_continuous = "bites"
+ attack_verb_simple = "bite"
+ waddle_amount = 3
+ waddle_up_time = 1
+ waddle_side_time = 2
+ attack_sound = 'sound/weapons/punch1.ogg'
+ young_type = /mob/living/simple_animal/hostile/retaliate/ncrattackdog
+ food_types = list(
+ /obj/item/reagent_containers/food/snacks/meat/slab,
+ /obj/item/reagent_containers/food/snacks/meat/slab/gecko,
+ /obj/item/reagent_containers/food/snacks/meat/slab/human,
+ /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant,
+ /obj/item/reagent_containers/food/snacks/meat/slab/chicken,
+ /obj/item/reagent_containers/food/snacks/meat/slab/molerat,
+ /obj/item/reagent_containers/food/snacks/meat/slab/mirelurk,
+ /obj/item/reagent_containers/food/snacks/meat/slab/ant_meat,
+ /obj/item/reagent_containers/food/snacks/meat/slab/fireant_meat,
+ /obj/item/reagent_containers/food/snacks/meat/slab/bloatfly_meat,
+ /obj/item/reagent_containers/food/snacks/meat/slab/radscorpion_meat,
+ /obj/item/reagent_containers/food/snacks/meat/slab/cazador_meat,
+ /obj/item/reagent_containers/food/snacks/f13/canned/dog
+ )
+ milk_reagent = /datum/reagent/toxin
+ ride_offsets = list(
+ "1" = list(15, 8),
+ "2" = list(15, 8),
+ "4" = list(15, 8),
+ "8" = list(15, 8)
+ )
+ guaranteed_butcher_results = list(
+ /obj/item/reagent_containers/food/snacks/meat/slab/wolf = 2,
+ /obj/item/stack/sheet/sinew = 2,
+ /obj/item/stack/sheet/bone = 2
+ )
+ butcher_results = list(
+ /obj/item/stack/sheet/animalhide/wolf = 1,
+ /obj/item/reagent_containers/food/snacks/meat/slab/wolf = 1
+ )
+ butcher_difficulty = 1
+
+/mob/living/simple_animal/cow/brahmin/camilla
+ name = "Camilla"
+ desc = "One cute gal, here to give you and your army everything you need."
+ icon = 'icons/fallout/mobs/monsters/freaks.dmi'
+ icon_state = "centaur"
+ icon_living = "centaur"
+ icon_dead = "centaur_dead"
+ icon_gib = "centaur_g"
+ speak = list("*growl")
+ speak_emote = list("gurgles","growls")
+ emote_hear = list("perks its head up.")
+ emote_see = list("stares.")
+ speak_chance = 1
+ turns_per_move = 8
+ see_in_dark = 6
+ health = 70
+ maxHealth = 70
+ ride_move_delay = 1.8
+ can_ghost_into = FALSE
+ response_help_continuous = "pat"
+ response_help_simple = "pet"
+ response_disarm_continuous = "gently pushes aside"
+ response_disarm_simple = "gently push aside"
+ response_harm_continuous = "bites"
+ response_harm_simple = "bites"
+ attack_verb_continuous = "bites"
+ attack_verb_simple = "bite"
+ waddle_amount = 3
+ waddle_up_time = 1
+ waddle_side_time = 2
+ attack_sound = 'sound/weapons/punch1.ogg'
+ young_type = /mob/living/simple_animal/hostile/retaliate/tamedcentaur
+ food_types = list(
+ /obj/item/reagent_containers/food/snacks/meat/slab,
+ /obj/item/reagent_containers/food/snacks/meat/slab/gecko,
+ /obj/item/reagent_containers/food/snacks/meat/slab/human,
+ /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant,
+ /obj/item/reagent_containers/food/snacks/meat/slab/chicken,
+ /obj/item/reagent_containers/food/snacks/meat/slab/molerat,
+ /obj/item/reagent_containers/food/snacks/meat/slab/mirelurk,
+ /obj/item/reagent_containers/food/snacks/meat/slab/ant_meat,
+ /obj/item/reagent_containers/food/snacks/meat/slab/fireant_meat,
+ /obj/item/reagent_containers/food/snacks/meat/slab/bloatfly_meat,
+ /obj/item/reagent_containers/food/snacks/meat/slab/radscorpion_meat,
+ /obj/item/reagent_containers/food/snacks/meat/slab/cazador_meat,
+ /obj/item/reagent_containers/food/snacks/f13/canned/dog
+ )
+ milk_reagent = /datum/reagent/toxin
+ ride_offsets = list(
+ "1" = list(15, 8),
+ "2" = list(15, 8),
+ "4" = list(15, 8),
+ "8" = list(15, 8)
+ )
+ guaranteed_butcher_results = list(
+ /obj/item/reagent_containers/food/snacks/meat/slab/human/centaur = 3,
+ /obj/item/stack/sheet/sinew = 4,
+ /obj/item/stack/sheet/bone = 4
+ )
+ butcher_results = list(
+ /obj/item/stack/sheet/animalhide/human = 1,
+ /obj/item/reagent_containers/food/snacks/meat/slab/human/centaur = 1
+ )
+ butcher_difficulty = 1
+
+/mob/living/simple_animal/cow/brahmin/rochelle
+ name = "Rochelle"
+ desc = "The town's big mama, Some say that 1 in every 3 radroaches in Pahrump are related to her."
+ icon = 'icons/fallout/mobs/animals/insects.dmi'
+ icon_state = "radroach"
+ icon_living = "radroach"
+ icon_dead = "radroach_dead"
+ icon_gib = "radroach_gib"
+ speak = list("*flickers","*skitters")
+ speak_emote = list("hisses")
+ emote_hear = list("perks its head up.")
+ emote_see = list("stares.")
+ speak_chance = 1
+ turns_per_move = 6
+ see_in_dark = 6
+ health = 70
+ maxHealth = 70
+ ride_move_delay = 1.8
+ can_ghost_into = FALSE
+ response_help_continuous = "pat"
+ response_help_simple = "pet"
+ response_disarm_continuous = "gently pushes aside"
+ response_disarm_simple = "gently push aside"
+ response_harm_continuous = "bites"
+ response_harm_simple = "bites"
+ attack_verb_continuous = "bites"
+ attack_verb_simple = "bite"
+ waddle_amount = 3
+ waddle_up_time = 1
+ waddle_side_time = 2
+ attack_sound = 'sound/weapons/punch1.ogg'
+ young_type = /mob/living/simple_animal/hostile/retaliate/tamedradroach
+ food_types = list(
+ /obj/item/reagent_containers/food/snacks/meat/slab,
+ /obj/item/reagent_containers/food/snacks/meat/slab/gecko,
+ /obj/item/reagent_containers/food/snacks/meat/slab/human,
+ /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant,
+ /obj/item/reagent_containers/food/snacks/meat/slab/chicken,
+ /obj/item/reagent_containers/food/snacks/meat/slab/molerat,
+ /obj/item/reagent_containers/food/snacks/meat/slab/mirelurk,
+ /obj/item/reagent_containers/food/snacks/meat/slab/ant_meat,
+ /obj/item/reagent_containers/food/snacks/meat/slab/fireant_meat,
+ /obj/item/reagent_containers/food/snacks/meat/slab/bloatfly_meat,
+ /obj/item/reagent_containers/food/snacks/meat/slab/radscorpion_meat,
+ /obj/item/reagent_containers/food/snacks/meat/slab/cazador_meat,
+ /obj/item/reagent_containers/food/snacks/f13/canned/dog
+ )
+ milk_reagent = /datum/reagent/toxin
+ ride_offsets = list(
+ "1" = list(15, 8),
+ "2" = list(15, 8),
+ "4" = list(15, 8),
+ "8" = list(15, 8)
+ )
+ guaranteed_butcher_results = list(
+ /obj/item/reagent_containers/food/snacks/meat/slab/radroach_meat = 2,
+ )
+ butcher_results = list(
+ /obj/item/stack/sheet/animalhide/chitin = 3,
+ /obj/item/reagent_containers/food/snacks/meat/slab/radroach_meat = 1
+ )
+ butcher_difficulty = 1
+
+/mob/living/simple_animal/cow/brahmin/rochelle/roachmother
+ name = "Radroach Broodmother"
+ desc = "One of Rochelle's daughters, Following in their mother's example."
+ health = 50
+ maxHealth = 50
/*
/obj/item/brahminbags
diff --git a/code/modules/mob/living/simple_animal/hostile/abilities_common.dm b/code/modules/mob/living/simple_animal/hostile/abilities_common.dm
index d57d33a26b7..02093e536f4 100644
--- a/code/modules/mob/living/simple_animal/hostile/abilities_common.dm
+++ b/code/modules/mob/living/simple_animal/hostile/abilities_common.dm
@@ -26,15 +26,31 @@
/mob/living/simple_animal/hostile/gecko,\
/mob/living/simple_animal/hostile/gecko/legacy,\
/mob/living/simple_animal/hostile/gecko/fire,\
+ /mob/living/simple_animal/hostile/gecko/legacy/alpha,\
+ /mob/living/simple_animal/hostile/gecko/big,\
/mob/living/simple_animal/hostile/molerat,\
+ /mob/living/simple_animal/hostile/bloatfly,\
+ /mob/living/simple_animal/hostile/wolf, \
+ /mob/living/simple_animal/hostile/wolf/alpha, \
/mob/living/simple_animal/hostile/radroach)
#define CONTROL_SMALLCRITTER_ALLOWED list(\
/mob/living/simple_animal/hostile/gecko,\
- /mob/living/simple_animal/hostile/gecko,\
+ /mob/living/simple_animal/hostile/stalkeryoung,\
/mob/living/simple_animal/hostile/gecko/legacy,\
/mob/living/simple_animal/hostile/gecko/fire,\
+ /mob/living/simple_animal/hostile/gecko/legacy/alpha,\
+ /mob/living/simple_animal/hostile/gecko/big,\
/mob/living/simple_animal/hostile/molerat,\
+ /mob/living/simple_animal/hostile/bloatfly,\
+ /mob/living/simple_animal/hostile/wolf, \
+ /mob/living/simple_animal/hostile/wolf/alpha, \
+ /mob/living/simple_animal/hostile/retaliate/legionstalker, \
+ /mob/living/simple_animal/hostile/retaliate/legionhound, \
+ /mob/living/simple_animal/hostile/retaliate/ncrguarddog, \
+ /mob/living/simple_animal/hostile/retaliate/ncrattackdog, \
+ /mob/living/simple_animal/hostile/retaliate/tamedcentaur, \
+ /mob/living/simple_animal/hostile/retaliate/tamedradroach, \
/mob/living/simple_animal/hostile/radroach)
@@ -480,14 +496,14 @@
M.do_alert_animation(M)
user.show_message(span_notice("The [M.name] ain't that simple..."))
continue
- if("neutral" in M.faction) // Mob is already tamed, or just don't need to be (e.g. curious mice)
+ if("critter-friend" in M.faction) // Mob is already tamed, or just don't need to be (e.g. curious mice)
continue
if(prob(35)) // Failure chance
M.do_alert_animation(M)
user.show_message(span_red("The [M.name] wasn't tamed."))
COOLDOWN_START(src, taming_cooldown, 30 SECONDS)
continue
- M.faction |= "neutral" // Kinda want to perserve some of F3/NV behavior of tamed not helping with other/same-faction animal
+ M.faction |= "critter-friend"
user.show_message(span_green("The [M.name] is tamed!"))
M.name = "tamed [initial(M.name)]"
M.desc = "[initial(M.desc)] This one appears to be tame."
diff --git a/code/modules/mob/living/simple_animal/hostile/f13/centaur.dm b/code/modules/mob/living/simple_animal/hostile/f13/centaur.dm
index e7f04f6c7c4..182470d8277 100644
--- a/code/modules/mob/living/simple_animal/hostile/f13/centaur.dm
+++ b/code/modules/mob/living/simple_animal/hostile/f13/centaur.dm
@@ -76,6 +76,58 @@
armour_penetration = 0.1
+/mob/living/simple_animal/hostile/retaliate/tamedcentaur
+ name = "tamed centaur"
+ desc = "A super mutant's best friend, Will only obey the leader or one of his soldiers."
+ icon = 'icons/fallout/mobs/monsters/freaks.dmi'
+ icon_state = "centaur"
+ icon_living = "centaur"
+ icon_dead = "centaur_dead"
+ icon_gib = "centaur_g"
+ tastes = list("sadness" = 1, "nastyness" = 1)
+ can_ghost_into = TRUE
+ maxHealth = 130
+ sentience_type = SENTIENCE_BOSS
+ health = 130
+ speed = 3
+ harm_intent_damage = 8
+ melee_damage_lower = 15
+ melee_damage_upper = 20
+ ranged = TRUE
+ wound_bonus = 0
+ footstep_type = FOOTSTEP_MOB_CRAWL
+ mob_biotypes = MOB_ORGANIC|MOB_HUMANOID
+ robust_searching = TRUE
+ move_to_delay = 4
+ retreat_distance = 0
+ minimum_distance = 0
+ aggro_vision_range = 7
+ vision_range = 7
+ turns_per_move = 5
+ speak_emote = list("growls")
+ emote_see = list("screeches", "screams", "howls", "bellows", "flails", "fidgets", "festers")
+ a_intent = INTENT_HARM
+ attack_verb_simple = list("whipped", "whacked", "whomped", "wailed on", "smacked", "smashed", "bapped")
+ atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0)
+ unsuitable_atmos_damage = 20
+ stat_attack = CONSCIOUS
+ gold_core_spawnable = HOSTILE_SPAWN
+ faction = list(FACTION_SMUTANT)
+ guaranteed_butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/human/centaur = 3,
+ /obj/item/stack/sheet/animalhide/human = 2,
+ /obj/item/stack/sheet/bone = 2)
+ projectiletype = /obj/item/projectile/neurotox
+ projectilesound = 'sound/f13npc/centaur/spit.ogg'
+ emote_taunt_sound = list('sound/f13npc/centaur/taunt.ogg')
+ emote_taunt = list("grunts", "gurgles", "wheezes", "flops", "scrabbles")
+ taunt_chance = 30
+ aggrosound = list('sound/f13npc/centaur/aggro1.ogg', )
+ idlesound = list('sound/f13npc/centaur/idle1.ogg', 'sound/f13npc/centaur/idle2.ogg')
+ death_sound = 'sound/f13npc/centaur/centaur_death.ogg'
+ attack_sound = 'sound/f13npc/centaur/lash.ogg'
+
+
+
// -----------------------------------
// ABOMINATION
diff --git a/code/modules/mob/living/simple_animal/hostile/f13/insects.dm b/code/modules/mob/living/simple_animal/hostile/f13/insects.dm
index 33abe48665e..c44b65b292c 100644
--- a/code/modules/mob/living/simple_animal/hostile/f13/insects.dm
+++ b/code/modules/mob/living/simple_animal/hostile/f13/insects.dm
@@ -574,3 +574,57 @@
/mob/living/simple_animal/hostile/radroach/jungle
faction = list("gecko", "critter-friend", "jungle")
+
+/mob/living/simple_animal/hostile/retaliate/tamedradroach
+ name = "Tamed radroach"
+ desc = "Easy to find, Easy to mass-produce, The APEX of cannon-foddery."
+ icon = 'icons/fallout/mobs/animals/insects.dmi'
+ icon_state = "radroach"
+ icon_living = "radroach"
+ icon_dead = "radroach_dead"
+ icon_gib = "radroach_gib"
+ can_ghost_into = TRUE
+ waddle_amount = 1
+ waddle_up_time = 1
+ waddle_side_time = 1
+ speed = 2
+ maxHealth = 35
+ health = 35
+ harm_intent_damage = 8
+ obj_damage = 20
+ melee_damage_lower = 5
+ melee_damage_upper = 10
+ mob_biotypes = MOB_ORGANIC|MOB_BEAST
+ speak_chance = 0
+ turns_per_move = 5
+ guaranteed_butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/radroach_meat = 2, /obj/item/stack/sheet/sinew = 1)
+ butcher_results = list(/obj/item/stack/sheet/animalhide/chitin = 1)
+ butcher_difficulty = 1.5
+ response_help_simple = "pet"
+ response_disarm_simple = "gently pushes aside"
+ response_harm_simple = "hits"
+ attack_verb_simple = "nips"
+ attack_sound = 'sound/creatures/radroach_attack.ogg'
+ speak_emote = list("skitters")
+ atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0)
+ faction = list(FACTION_EASTWOOD)
+ a_intent = INTENT_HARM
+ pass_flags = PASSTABLE | PASSMOB
+ density = FALSE
+ gold_core_spawnable = HOSTILE_SPAWN
+ randpixel = 12
+ variation_list = list(
+ MOB_COLOR_VARIATION(50, 50, 50, 255, 255, 255),
+ MOB_SPEED_LIST(2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8),
+ MOB_SPEED_CHANGE_PER_TURN_CHANCE(100),
+ MOB_RETREAT_DISTANCE_LIST(0, 2, 3),
+ MOB_RETREAT_DISTANCE_CHANGE_PER_TURN_CHANCE(100),
+ MOB_MINIMUM_DISTANCE_LIST(0, 1, 1),
+ MOB_MINIMUM_DISTANCE_CHANGE_PER_TURN_CHANCE(5),
+ )
+ aggrosound = list('sound/creatures/radroach_chitter.ogg',)
+ idlesound = list('sound/f13npc/roach/idle1.ogg', 'sound/f13npc/roach/idle2.ogg', 'sound/f13npc/roach/idle3.ogg',)
+ death_sound = 'sound/f13npc/roach/roach_death.ogg'
+ desc_short = "One of countless bugs that move in gross hordes."
+ pop_required_to_jump_into = SMALL_MOB_MIN_PLAYERS
+
diff --git a/code/modules/mob/living/simple_animal/hostile/f13/wasteanimals.dm b/code/modules/mob/living/simple_animal/hostile/f13/wasteanimals.dm
index 31a19b5f4c1..c73f4db1d33 100644
--- a/code/modules/mob/living/simple_animal/hostile/f13/wasteanimals.dm
+++ b/code/modules/mob/living/simple_animal/hostile/f13/wasteanimals.dm
@@ -426,7 +426,7 @@
aggro_vision_range = 7
vision_range = 9
- faction = list("gecko")
+ faction = list("gecko", "critter-friend")
a_intent = INTENT_HARM
gold_core_spawnable = HOSTILE_SPAWN
footstep_type = FOOTSTEP_MOB_CLAW
@@ -494,7 +494,7 @@
vision_range = 4
- faction = list("gecko")
+ faction = list("gecko", "critter-friend")
a_intent = INTENT_HARM
gold_core_spawnable = HOSTILE_SPAWN
footstep_type = FOOTSTEP_MOB_HEAVY
@@ -642,7 +642,7 @@
attack_sound = 'sound/creatures/nightstalker_bite.ogg'
speak_emote = list("growls")
atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0)
- faction = list("nightstalkers")
+ faction = list("nightstalkers", "critter-friend")
gold_core_spawnable = HOSTILE_SPAWN
a_intent = INTENT_HARM
footstep_type = FOOTSTEP_MOB_CLAW
@@ -676,6 +676,64 @@
icon_living = "nightstalker-legion"
icon_dead = "nightstalker-legion-dead"
+/mob/living/simple_animal/hostile/retaliate/legionstalker
+ name = "Legionstalker"
+ desc = "A nightstalker bred specifically for the legion under the use of combat and companionship. legionstalkers have the body and loyalty of a canine but the agility and deadlyness of rattlesnake."
+ icon = 'icons/fallout/mobs/animals/nightstalker.dmi'
+ icon_state = "nightstalker-legion"
+ icon_living = "nightstalker-legion"
+ icon_dead = "nightstalker-legion-dead"
+ icon_gib = null
+ mob_biotypes = MOB_ORGANIC|MOB_BEAST
+ speak_chance = 0
+ stat_attack = UNCONSCIOUS
+ turns_per_move = 3
+ move_to_delay = 1
+ retreat_distance = 0
+ minimum_distance = 0
+ aggro_vision_range = 7
+ vision_range = 8
+ guaranteed_butcher_results = list(
+ /obj/item/reagent_containers/food/snacks/meat/slab/nightstalker_meat = 2,
+ /obj/item/stack/sheet/sinew = 2,
+ /obj/item/stack/sheet/bone = 2
+ )
+ butcher_results = list(
+ /obj/item/clothing/head/f13/stalkerpelt = 1,
+ /obj/item/reagent_containers/food/snacks/meat/slab/nightstalker_meat = 1
+ )
+ butcher_difficulty = 3
+ response_help_simple = "pet"
+ response_disarm_simple = "gently pushes aside"
+ response_harm_simple = "bites"
+ emote_taunt = list("growls")
+ taunt_chance = 30
+ speed = 1
+ maxHealth = 110
+ health = 110
+ harm_intent_damage = 8
+ obj_damage = 15
+ melee_damage_lower = 15
+ melee_damage_upper = 20
+ attack_verb_simple = "bites"
+ attack_sound = 'sound/creatures/nightstalker_bite.ogg'
+ speak_emote = list("growls")
+ atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0)
+ faction = list(FACTION_LEGION)
+ friends = list(FACTION_LEGION)
+ gold_core_spawnable = HOSTILE_SPAWN
+ a_intent = INTENT_HARM
+ footstep_type = FOOTSTEP_MOB_CLAW
+ waddle_amount = 2
+ waddle_up_time = 1
+ waddle_side_time = 1
+
+/mob/living/simple_animal/hostile/retaliate/legionstalker/AttackingTarget()
+ . = ..()
+ if(. && ishuman(target))
+ var/mob/living/carbon/human/H = target
+ H.reagents.add_reagent(/datum/reagent/toxin/cazador_venom, 6)
+
// NIGHTSTALKER CUB
/mob/living/simple_animal/hostile/stalkeryoung
name = "young nightstalker"
@@ -802,7 +860,7 @@
attack_sound = 'sound/creatures/molerat_attack.ogg'
speak_emote = list("chitters")
atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0)
- faction = list("hostile", "gecko")
+ faction = list("hostile", "gecko", "critter-friend")
gold_core_spawnable = HOSTILE_SPAWN
a_intent = INTENT_HARM
diff --git a/code/modules/mob/living/simple_animal/hostile/f13/wolf.dm b/code/modules/mob/living/simple_animal/hostile/f13/wolf.dm
index 9aeb9ccaafa..e516c053d18 100644
--- a/code/modules/mob/living/simple_animal/hostile/f13/wolf.dm
+++ b/code/modules/mob/living/simple_animal/hostile/f13/wolf.dm
@@ -16,7 +16,7 @@
response_harm_simple = "kicks"
maxHealth = 50
health = 50
- faction = list("hostile", "wolf")
+ faction = list("hostile", "wolf", "critter-friend")
environment_smash = 0
guaranteed_butcher_results = list(/obj/item/stack/sheet/animalhide/wolf = 1, /obj/item/reagent_containers/food/snacks/meat/slab/wolf = 1,/obj/item/stack/sheet/bone = 1)
melee_damage_lower = 8
@@ -110,3 +110,119 @@
icon_living = "shepherd"
icon_dead = "shepherd_dead"
icon_gib = "gib"
+
+/mob/living/simple_animal/hostile/retaliate/legionhound
+ name = "Legion Hound"
+ desc = "War Hounds Hailing from Denver, This breed is slightly smaller then the popular Mongrel, But they're just as deadly, And don't leave around as much fur."
+ icon = 'icons/fallout/mobs/animals/dogs.dmi'
+ icon_state = "legiondog"
+ icon_living = "legiondog"
+ icon_dead = "legiondog_dead"
+ icon_gib = "gib"
+ can_ghost_into = TRUE
+ mob_biotypes = MOB_ORGANIC|MOB_BEAST
+ turns_per_move = 3
+ response_help_simple = "pet"
+ response_disarm_simple = "push aside"
+ response_harm_simple = "kick"
+ maxHealth = 85
+ health = 85
+ faction = list(FACTION_LEGION)
+ friends = list(FACTION_LEGION)
+ environment_smash = 1
+ guaranteed_butcher_results = list(/obj/item/stack/sheet/animalhide/wolf = 1, /obj/item/reagent_containers/food/snacks/meat/slab/wolf = 1,/obj/item/stack/sheet/bone = 1)
+ melee_damage_lower = 8
+ melee_damage_upper = 20
+ aggro_vision_range = 25
+ waddle_amount = 2
+ waddle_up_time = 0
+ waddle_side_time = 1
+ aggro_vision_range = 7
+ attack_verb_simple = "bites"
+ attack_sound = 'sound/weapons/bite.ogg'
+ move_to_delay = 2
+ footstep_type = FOOTSTEP_MOB_BAREFOOT
+ emote_taunt_sound = list('sound/f13npc/dog/dog_charge1.ogg', 'sound/f13npc/dog/dog_charge2.ogg', 'sound/f13npc/dog/dog_charge3.ogg', 'sound/f13npc/dog/dog_charge4.ogg', 'sound/f13npc/dog/dog_charge5.ogg', 'sound/f13npc/dog/dog_charge6.ogg', 'sound/f13npc/dog/dog_charge7.ogg',)
+ emote_taunt = list("growls", "barks", "snarls")
+ taunt_chance = 30
+ aggrosound = list('sound/f13npc/dog/dog_alert1.ogg', 'sound/f13npc/dog/dog_alert2.ogg', 'sound/f13npc/dog/dog_alert3.ogg')
+ idlesound = list('sound/f13npc/dog/dog_bark1.ogg', 'sound/f13npc/dog/dog_bark2.ogg', 'sound/f13npc/dog/dog_bark3.ogg')
+ death_sound = 'sound/f13npc/centaur/centaur_death.ogg'
+
+/mob/living/simple_animal/hostile/retaliate/ncrguarddog
+ name = "NCR Guard Dog"
+ desc = "NCR Sheepdogs used for guard duty, Law enforcement, And escort missions, They are known for their intelligence and have worked alongside humans for thousands of years."
+ icon = 'icons/fallout/mobs/animals/dogs.dmi'
+ icon_state = "tippen"
+ icon_living = "tippen"
+ icon_dead = "tippen_dead"
+ icon_gib = "gib"
+ can_ghost_into = TRUE
+ mob_biotypes = MOB_ORGANIC|MOB_BEAST
+ turns_per_move = 2
+ response_help_simple = "pet"
+ response_disarm_simple = "push aside"
+ response_harm_simple = "kick"
+ maxHealth = 70
+ health = 70
+ faction = list(FACTION_NCR)
+ friends = list(FACTION_NCR)
+ environment_smash = 1
+ guaranteed_butcher_results = list(/obj/item/stack/sheet/animalhide/wolf = 1, /obj/item/reagent_containers/food/snacks/meat/slab/wolf = 1,/obj/item/stack/sheet/bone = 1)
+ melee_damage_lower = 15
+ melee_damage_upper = 20
+ aggro_vision_range = 10
+ waddle_amount = 3
+ waddle_up_time = 0
+ waddle_side_time = 1
+ aggro_vision_range = 7
+ attack_verb_simple = "bites"
+ attack_sound = 'sound/weapons/bite.ogg'
+ move_to_delay = 2
+ footstep_type = FOOTSTEP_MOB_BAREFOOT
+ emote_taunt_sound = list('sound/f13npc/dog/dog_charge1.ogg', 'sound/f13npc/dog/dog_charge2.ogg', 'sound/f13npc/dog/dog_charge3.ogg', 'sound/f13npc/dog/dog_charge4.ogg', 'sound/f13npc/dog/dog_charge5.ogg', 'sound/f13npc/dog/dog_charge6.ogg', 'sound/f13npc/dog/dog_charge7.ogg',)
+ emote_taunt = list("growls", "barks", "snarls")
+ taunt_chance = 30
+ aggrosound = list('sound/f13npc/dog/dog_alert1.ogg', 'sound/f13npc/dog/dog_alert2.ogg', 'sound/f13npc/dog/dog_alert3.ogg')
+ idlesound = list('sound/f13npc/dog/dog_bark1.ogg', 'sound/f13npc/dog/dog_bark2.ogg', 'sound/f13npc/dog/dog_bark3.ogg')
+ death_sound = 'sound/f13npc/centaur/centaur_death.ogg'
+
+/mob/living/simple_animal/hostile/retaliate/ncrattackdog
+ name = "NCR Attack Dog"
+ desc = "NCR Attack Dogs are purpose-built for war, They were brought into the NCRA along with the rangers, Loyal and ferocious."
+ icon = 'icons/fallout/mobs/animals/dogs.dmi'
+ icon_state = "shepherd"
+ icon_living = "shepherd"
+ icon_dead = "shepherd_dead"
+ icon_gib = "gib"
+ can_ghost_into = TRUE
+ mob_biotypes = MOB_ORGANIC|MOB_BEAST
+ turns_per_move = 3
+ response_help_simple = "pet"
+ response_disarm_simple = "push aside"
+ response_harm_simple = "kick"
+ maxHealth = 90
+ health = 90
+ faction = list(FACTION_NCR)
+ friends = list(FACTION_NCR)
+ environment_smash = 1
+ guaranteed_butcher_results = list(/obj/item/stack/sheet/animalhide/wolf = 1, /obj/item/reagent_containers/food/snacks/meat/slab/wolf = 1,/obj/item/stack/sheet/bone = 1)
+ melee_damage_lower = 25
+ melee_damage_upper = 30
+ aggro_vision_range = 15
+ waddle_amount = 2
+ waddle_up_time = 0
+ waddle_side_time = 1
+ aggro_vision_range = 7
+ attack_verb_simple = "bites"
+ attack_sound = 'sound/weapons/bite.ogg'
+ move_to_delay = 2
+ footstep_type = FOOTSTEP_MOB_BAREFOOT
+ emote_taunt_sound = list('sound/f13npc/dog/dog_charge1.ogg', 'sound/f13npc/dog/dog_charge2.ogg', 'sound/f13npc/dog/dog_charge3.ogg', 'sound/f13npc/dog/dog_charge4.ogg', 'sound/f13npc/dog/dog_charge5.ogg', 'sound/f13npc/dog/dog_charge6.ogg', 'sound/f13npc/dog/dog_charge7.ogg',)
+ emote_taunt = list("growls", "barks", "snarls")
+ taunt_chance = 30
+ aggrosound = list('sound/f13npc/dog/dog_alert1.ogg', 'sound/f13npc/dog/dog_alert2.ogg', 'sound/f13npc/dog/dog_alert3.ogg')
+ idlesound = list('sound/f13npc/dog/dog_bark1.ogg', 'sound/f13npc/dog/dog_bark2.ogg', 'sound/f13npc/dog/dog_bark3.ogg')
+ death_sound = 'sound/f13npc/centaur/centaur_death.ogg'
+
+
diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm
index 63c5ca03660..8c3d6f69782 100644
--- a/code/modules/mob/living/simple_animal/hostile/hostile.dm
+++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm
@@ -927,3 +927,16 @@ mob/living/simple_animal/hostile/proc/DestroySurroundings() // for use with mega
minimum_distance = rand(0, 10)
LoseTarget()
visible_message(span_notice("[src] jerks around wildly and starts acting strange!"))
+
+/mob/living/simple_animal/hostile/attackby(obj/item/I, mob/living/user, params, attackchain_flags, damage_multiplier)
+ . = ..()
+ if(istype(I, /obj/item/melee/onehanded/dogprod))
+ if("critter-friend" in faction)
+ LoseTarget()
+ LoseAggro()
+ peaceful = TRUE
+
+/mob/living/simple_animal/hostile/attackby(obj/item/I, mob/living/user, params, attackchain_flags, damage_multiplier)
+ . = ..()
+ if(istype(I, /obj/item/melee/onehanded/dogwhip))
+ peaceful = FALSE
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm
index ceacc06a038..28b3d9882a0 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm
@@ -54,3 +54,16 @@
. = ..()
if(. > 0 && stat == CONSCIOUS)
Retaliate()
+
+/mob/living/simple_animal/hostile/retaliate/attackby(obj/item/I, mob/living/user, params, attackchain_flags, damage_multiplier)
+ . = ..()
+ if(istype(I, /obj/item/melee/onehanded/dogprod))
+ if("critter-friend" in faction)
+ LoseTarget()
+ LoseAggro()
+ peaceful = TRUE
+
+/mob/living/simple_animal/hostile/retaliate/attackby(obj/item/I, mob/living/user, params, attackchain_flags, damage_multiplier)
+ . = ..()
+ if(istype(I, /obj/item/melee/onehanded/dogwhip))
+ peaceful = FALSE
diff --git a/fallout/code/game/objects/eyebots.dm b/fallout/code/game/objects/eyebots.dm
index b73dae9ffa2..75a65c87d0b 100644
--- a/fallout/code/game/objects/eyebots.dm
+++ b/fallout/code/game/objects/eyebots.dm
@@ -1,8 +1,29 @@
var/list/eyebots = list()
/mob/living/simple_animal/hostile/eyebot/virtual
+ name = "Brotherhood Eyebot"
+ desc = "An eyebot reprogrammed and repurposed by brotherhood scribes for Reconnaissance work, Useful in a skirmish."
+ maxHealth = 65
+ health = 65
+ peaceful = TRUE
+ faction = list(FACTION_BROTHERHOOD)
+ turns_per_move = -1
var/mob/living/carbon/human/pilot
+/mob/living/simple_animal/hostile/eyebot/virtual/floatingeye
+ name = "Brotherhood Floating Eyebot"
+ desc = "A quick-observation robot reprogrammed and repurposed by brotherhood scribes, Not very deadly, And not very tough, But is armed with a debilitating ranged electrode taser."
+ maxHealth = 35
+ health = 35
+ peaceful = TRUE
+ faction = list(FACTION_BROTHERHOOD)
+ icon = 'icons/fallout/mobs/robots/eyebots.dmi'
+ icon_state = "floatingeye"
+ icon_living = "floatingeye"
+ icon_dead = "floatingeye_d"
+ projectiletype = /obj/item/projectile/energy/electrode
+ projectilesound = 'sound/weapons/resonator_blast.ogg'
+
/mob/living/simple_animal/hostile/eyebot/virtual/New()
. = ..()
eyebots += src
@@ -36,10 +57,10 @@ var/list/eyebots = list()
/obj/machinery/computer/eyebots
name = "eyebot console"
- desc = "Used to access eyebots."
+ desc = "Used to access eyebots. (Type stop-control to leave an eyebot.)"
icon = 'icons/fallout/machines/terminals.dmi'
- icon_state = "enclave"
- icon_screen = "enclave_on"
+ icon_state = "advanced"
+ icon_screen = "advanced_on"
var/datum/browser/popup
/obj/machinery/computer/eyebots/New()
diff --git a/hailmary.dme b/hailmary.dme
index 655e5a4601a..cec0fb5d656 100644
--- a/hailmary.dme
+++ b/hailmary.dme
@@ -1470,9 +1470,9 @@
#include "code\modules\admin\holder2.dm"
#include "code\modules\admin\ipintel.dm"
#include "code\modules\admin\IsBanned.dm"
-#include "code\modules\admin\outfits.dm"
#include "code\modules\admin\multikey_bypass.dm"
#include "code\modules\admin\NewBan.dm"
+#include "code\modules\admin\outfits.dm"
#include "code\modules\admin\permissionedit.dm"
#include "code\modules\admin\player_panel.dm"
#include "code\modules\admin\secrets.dm"