mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-17 11:05:16 +01:00
[MIRROR] Makes dog a basic mob [MDB IGNORE] [MDB IGNORE] (#17930)
* Makes dog a basic mob [MDB IGNORE] * conflict * map updatepaths * minor banana spider improvement * unnecessary SR edit, minor path stuff * chadian, borgi * tram conflict * fixes after testing Co-authored-by: Tastyfish <crazychris32@gmail.com>
This commit is contained in:
@@ -227,7 +227,7 @@
|
||||
dir = 4
|
||||
},
|
||||
/obj/item/pressure_plate/hologrid{
|
||||
reward = /mob/living/simple_animal/pet/dog/bullterrier
|
||||
reward = /mob/living/basic/pet/dog/bullterrier
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/ruin/powered/mailroom)
|
||||
|
||||
@@ -55,12 +55,6 @@
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/ruin/space/has_grav/cargodise_freighter/bridge)
|
||||
"bk" = (
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/item/modular_computer/pda/clear,
|
||||
/obj/effect/turf_decal/tile/blue/fourcorners,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/ruin/space/has_grav/cargodise_freighter/bridge)
|
||||
"bo" = (
|
||||
/obj/machinery/light/directional/north,
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on{
|
||||
@@ -1350,6 +1344,12 @@
|
||||
/obj/effect/turf_decal/tile/blue/fourcorners,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/ruin/space/has_grav/cargodise_freighter/bridge)
|
||||
"wb" = (
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/item/modular_computer/pda/engineering,
|
||||
/obj/effect/turf_decal/tile/blue/fourcorners,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/ruin/space/has_grav/cargodise_freighter/bridge)
|
||||
"wd" = (
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/item/paper_bin{
|
||||
@@ -1783,15 +1783,6 @@
|
||||
/obj/machinery/portable_atmospherics/pump,
|
||||
/turf/open/floor/plating,
|
||||
/area/ruin/space/has_grav/cargodise_freighter/utility)
|
||||
"BM" = (
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden,
|
||||
/mob/living/simple_animal/pet/dog/dobermann{
|
||||
desc = "The freighter's loyal, canine companion!";
|
||||
dir = 8;
|
||||
name = "Ace"
|
||||
},
|
||||
/turf/open/floor/carpet,
|
||||
/area/ruin/space/has_grav/cargodise_freighter/quarters)
|
||||
"BN" = (
|
||||
/obj/item/storage/cans/sixsoda,
|
||||
/obj/structure/cable,
|
||||
@@ -2430,6 +2421,15 @@
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/ruin/space/has_grav/cargodise_freighter/utility)
|
||||
"Mx" = (
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden,
|
||||
/mob/living/basic/pet/dog/dobermann{
|
||||
desc = "The freighter's loyal, canine companion!";
|
||||
dir = 8;
|
||||
name = "Ace"
|
||||
},
|
||||
/turf/open/floor/carpet,
|
||||
/area/ruin/space/has_grav/cargodise_freighter/quarters)
|
||||
"Mz" = (
|
||||
/obj/effect/spawner/structure/window/reinforced,
|
||||
/turf/open/floor/plating,
|
||||
@@ -2502,6 +2502,12 @@
|
||||
/obj/effect/turf_decal/tile/brown/fourcorners,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/ruin/space/has_grav/cargodise_freighter/mining)
|
||||
"Ng" = (
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/item/modular_computer/pda/clear,
|
||||
/obj/effect/turf_decal/tile/blue/fourcorners,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/ruin/space/has_grav/cargodise_freighter/bridge)
|
||||
"Nk" = (
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on{
|
||||
dir = 8
|
||||
@@ -3151,12 +3157,6 @@
|
||||
/obj/effect/spawner/random/engineering/flashlight,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/ruin/space/has_grav/cargodise_freighter/primaryhall)
|
||||
"UM" = (
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/item/modular_computer/pda/engineering,
|
||||
/obj/effect/turf_decal/tile/blue/fourcorners,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/ruin/space/has_grav/cargodise_freighter/bridge)
|
||||
"UX" = (
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden,
|
||||
/obj/effect/turf_decal/tile/brown/fourcorners,
|
||||
@@ -3971,7 +3971,7 @@ Zy
|
||||
qq
|
||||
eb
|
||||
lV
|
||||
BM
|
||||
Mx
|
||||
su
|
||||
su
|
||||
ZU
|
||||
@@ -5094,9 +5094,9 @@ wd
|
||||
GT
|
||||
PC
|
||||
GT
|
||||
UM
|
||||
wb
|
||||
GT
|
||||
bk
|
||||
Ng
|
||||
Yp
|
||||
PK
|
||||
lp
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
/turf/open/misc/beach/sand,
|
||||
/area/ruin/space/has_grav/powered)
|
||||
"H" = (
|
||||
/mob/living/simple_animal/pet/dog/corgi{
|
||||
/mob/living/basic/pet/dog/corgi{
|
||||
anchored = 1
|
||||
},
|
||||
/obj/structure/bed/dogbed,
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -145,6 +145,11 @@
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/service/chapel/office)
|
||||
"acP" = (
|
||||
/obj/structure/chair/sofa/corner/brown,
|
||||
/obj/structure/cable,
|
||||
/turf/open/floor/carpet/blue,
|
||||
/area/station/security/prison/work)
|
||||
"adr" = (
|
||||
/obj/effect/turf_decal/tile/yellow,
|
||||
/obj/effect/turf_decal/tile/yellow{
|
||||
@@ -4008,15 +4013,6 @@
|
||||
/obj/machinery/vending/dinnerware,
|
||||
/turf/open/floor/iron/kitchen/diagonal,
|
||||
/area/station/service/kitchen)
|
||||
"bms" = (
|
||||
/obj/machinery/computer/order_console/mining,
|
||||
/obj/machinery/light/small/directional/south,
|
||||
/obj/machinery/light_switch/directional/south,
|
||||
/obj/machinery/newscaster/directional/east,
|
||||
/turf/open/floor/iron/dark/side{
|
||||
dir = 4
|
||||
},
|
||||
/area/mine/production)
|
||||
"bmv" = (
|
||||
/obj/structure/cable,
|
||||
/turf/open/floor/iron,
|
||||
@@ -4252,17 +4248,6 @@
|
||||
},
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/ai_monitored/command/storage/eva)
|
||||
"bps" = (
|
||||
/obj/effect/turf_decal/siding/wood{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/chair/sofa/left/brown{
|
||||
desc = "Hey, did you know you can get a pineapple on your burger here?";
|
||||
dir = 1;
|
||||
name = "The Regular's Sofa"
|
||||
},
|
||||
/turf/open/floor/stone,
|
||||
/area/station/commons/lounge)
|
||||
"bpD" = (
|
||||
/obj/machinery/newscaster/directional/south,
|
||||
/obj/structure/closet/firecloset,
|
||||
@@ -4504,6 +4489,17 @@
|
||||
},
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/science/genetics)
|
||||
"bsR" = (
|
||||
/obj/machinery/door/airlock/research/glass/incinerator/ordmix_interior{
|
||||
name = "Burn Chamber Interior Airlock"
|
||||
},
|
||||
/obj/effect/mapping_helpers/airlock/locked,
|
||||
/obj/machinery/airlock_controller/incinerator_ordmix{
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/effect/mapping_helpers/airlock/access/all/science/ordnance,
|
||||
/turf/open/floor/engine,
|
||||
/area/station/science/ordnance/burnchamber)
|
||||
"bsV" = (
|
||||
/obj/structure/window/reinforced{
|
||||
dir = 1
|
||||
@@ -7394,12 +7390,6 @@
|
||||
/obj/effect/turf_decal/bot,
|
||||
/turf/open/floor/iron,
|
||||
/area/station/cargo/storage)
|
||||
"cih" = (
|
||||
/obj/structure/chair/sofa/left/brown,
|
||||
/obj/machinery/light/directional/north,
|
||||
/obj/effect/landmark/start/psychologist,
|
||||
/turf/open/floor/carpet/blue,
|
||||
/area/station/medical/psychology)
|
||||
"cin" = (
|
||||
/obj/effect/turf_decal/stripes/line,
|
||||
/turf/open/floor/iron,
|
||||
@@ -7442,6 +7432,17 @@
|
||||
/obj/effect/spawner/random/trash/cigbutt,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/science/breakroom)
|
||||
"cjd" = (
|
||||
/obj/effect/turf_decal/tile/brown,
|
||||
/obj/effect/turf_decal/tile/brown{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/light/small/directional/south,
|
||||
/obj/structure/chair/sofa/left/brown{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/medical/break_room)
|
||||
"cjj" = (
|
||||
/obj/machinery/holopad,
|
||||
/turf/open/floor/wood/parquet,
|
||||
@@ -8112,6 +8113,14 @@
|
||||
},
|
||||
/turf/open/floor/iron,
|
||||
/area/station/engineering/main)
|
||||
"cuh" = (
|
||||
/obj/structure/chair/sofa/left/brown{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/light/directional/east,
|
||||
/obj/structure/cable,
|
||||
/turf/open/floor/carpet/blue,
|
||||
/area/station/security/prison/work)
|
||||
"cum" = (
|
||||
/obj/effect/spawner/structure/window/hollow/reinforced/middle{
|
||||
dir = 1
|
||||
@@ -11847,32 +11856,6 @@
|
||||
/obj/structure/cable,
|
||||
/turf/open/floor/iron,
|
||||
/area/station/hallway/primary/central)
|
||||
"dyO" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/storage/box/monkeycubes{
|
||||
pixel_x = 6;
|
||||
pixel_y = 7
|
||||
},
|
||||
/obj/item/storage/box/monkeycubes{
|
||||
pixel_x = -5
|
||||
},
|
||||
/obj/item/storage/box/bodybags{
|
||||
pixel_x = -1;
|
||||
pixel_y = 6
|
||||
},
|
||||
/obj/item/storage/box/disks{
|
||||
pixel_x = 1;
|
||||
pixel_y = 5
|
||||
},
|
||||
/obj/item/storage/box/monkeycubes{
|
||||
pixel_x = 6;
|
||||
pixel_y = 7
|
||||
},
|
||||
/obj/item/storage/box/monkeycubes{
|
||||
pixel_x = -5
|
||||
},
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/science/genetics)
|
||||
"dyQ" = (
|
||||
/obj/machinery/power/apc/auto_name/directional/south,
|
||||
/obj/machinery/light/directional/south,
|
||||
@@ -12882,6 +12865,13 @@
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/mine/storage)
|
||||
"dOt" = (
|
||||
/obj/structure/chair/sofa/right/brown,
|
||||
/obj/item/toy/plush/moth{
|
||||
name = "Dr. Moff"
|
||||
},
|
||||
/turf/open/floor/carpet/blue,
|
||||
/area/station/medical/psychology)
|
||||
"dOw" = (
|
||||
/obj/structure/cable,
|
||||
/turf/open/floor/iron,
|
||||
@@ -15148,6 +15138,13 @@
|
||||
/obj/machinery/firealarm/directional/south,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/ai_monitored/turret_protected/ai)
|
||||
"eAI" = (
|
||||
/obj/structure/bed/dogbed/ian,
|
||||
/mob/living/basic/pet/dog/corgi/ian{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/iron,
|
||||
/area/station/command/heads_quarters/hop)
|
||||
"eAS" = (
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
|
||||
@@ -18953,16 +18950,6 @@
|
||||
/obj/effect/turf_decal/tile/blue/full,
|
||||
/turf/open/floor/iron/large,
|
||||
/area/station/medical/treatment_center)
|
||||
"fIv" = (
|
||||
/obj/machinery/door/airlock/public/glass/incinerator/atmos_interior,
|
||||
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
|
||||
/obj/effect/mapping_helpers/airlock/locked,
|
||||
/obj/machinery/airlock_controller/incinerator_atmos{
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos,
|
||||
/turf/open/floor/engine,
|
||||
/area/station/maintenance/disposal/incinerator)
|
||||
"fIH" = (
|
||||
/obj/structure/closet/lasertag/red,
|
||||
/obj/effect/spawner/random/contraband/permabrig_gear,
|
||||
@@ -19341,15 +19328,6 @@
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/medical/chemistry)
|
||||
"fPs" = (
|
||||
/obj/machinery/computer/order_console/mining,
|
||||
/obj/effect/turf_decal/tile/brown{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/brown,
|
||||
/obj/machinery/light_switch/directional/north,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/cargo/miningdock)
|
||||
"fPt" = (
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
|
||||
@@ -19579,15 +19557,6 @@
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/xenobiology)
|
||||
"fTu" = (
|
||||
/obj/structure/chair/sofa/right/brown{
|
||||
desc = "Hey, did you know you can get a pineapple on your burger here?";
|
||||
dir = 1;
|
||||
name = "The Regular's Sofa"
|
||||
},
|
||||
/obj/effect/landmark/start/hangover,
|
||||
/turf/open/floor/stone,
|
||||
/area/station/commons/lounge)
|
||||
"fTx" = (
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
|
||||
dir = 4
|
||||
@@ -21850,6 +21819,19 @@
|
||||
},
|
||||
/turf/open/misc/asteroid/snow/icemoon,
|
||||
/area/icemoon/surface/outdoors/nospawn)
|
||||
"gEl" = (
|
||||
/obj/structure/chair/sofa/right/brown{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/bar,
|
||||
/obj/effect/turf_decal/tile/bar{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/siding/white{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/iron,
|
||||
/area/station/hallway/secondary/service)
|
||||
"gEn" = (
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
|
||||
@@ -22465,13 +22447,6 @@
|
||||
/obj/effect/spawner/structure/window/reinforced,
|
||||
/turf/open/floor/plating,
|
||||
/area/station/command/heads_quarters/cmo)
|
||||
"gOc" = (
|
||||
/obj/structure/window/reinforced{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/chair/sofa/right/brown,
|
||||
/turf/open/floor/carpet/blue,
|
||||
/area/station/security/prison/work)
|
||||
"gOx" = (
|
||||
/obj/effect/turf_decal/loading_area,
|
||||
/obj/effect/turf_decal/tile/neutral/half/contrasted,
|
||||
@@ -23749,6 +23724,17 @@
|
||||
/obj/machinery/rnd/production/circuit_imprinter/department/science,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/robotics/lab)
|
||||
"hiB" = (
|
||||
/obj/effect/turf_decal/siding/wood{
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/chair/sofa/right/brown{
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/computer/security/telescreen/entertainment/directional/south,
|
||||
/obj/machinery/airalarm/directional/east,
|
||||
/turf/open/floor/iron/grimy,
|
||||
/area/station/commons/lounge)
|
||||
"hiF" = (
|
||||
/obj/machinery/light/floor,
|
||||
/turf/open/floor/iron/white,
|
||||
@@ -23880,6 +23866,10 @@
|
||||
/obj/item/bikehorn/rubberducky,
|
||||
/turf/open/floor/iron/freezer,
|
||||
/area/station/commons/toilet/locker)
|
||||
"hlz" = (
|
||||
/obj/structure/chair/sofa/middle/brown,
|
||||
/turf/open/floor/carpet/blue,
|
||||
/area/station/security/prison/work)
|
||||
"hlJ" = (
|
||||
/obj/machinery/light/directional/west,
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
@@ -24308,14 +24298,6 @@
|
||||
},
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/command/heads_quarters/cmo)
|
||||
"hsE" = (
|
||||
/obj/structure/chair/sofa/left/brown{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/light/directional/east,
|
||||
/obj/structure/cable,
|
||||
/turf/open/floor/carpet/blue,
|
||||
/area/station/security/prison/work)
|
||||
"hsI" = (
|
||||
/turf/closed/wall,
|
||||
/area/station/construction/mining/aux_base)
|
||||
@@ -24716,17 +24698,6 @@
|
||||
/obj/structure/sink/directional/south,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/medical/morgue)
|
||||
"hyS" = (
|
||||
/obj/effect/turf_decal/tile/brown,
|
||||
/obj/effect/turf_decal/tile/brown{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/light/small/directional/south,
|
||||
/obj/structure/chair/sofa/left/brown{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/medical/break_room)
|
||||
"hyV" = (
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/station/science/ordnance/testlab)
|
||||
@@ -26099,19 +26070,6 @@
|
||||
/obj/structure/cable,
|
||||
/turf/open/floor/carpet/red,
|
||||
/area/station/security/prison/work)
|
||||
"hXp" = (
|
||||
/obj/structure/chair/sofa/right/brown{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/bar,
|
||||
/obj/effect/turf_decal/tile/bar{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/siding/white{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/iron,
|
||||
/area/station/hallway/secondary/service)
|
||||
"hXU" = (
|
||||
/obj/machinery/newscaster/directional/east,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible,
|
||||
@@ -27730,13 +27688,6 @@
|
||||
},
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/medical/cryo)
|
||||
"ixm" = (
|
||||
/obj/structure/chair/sofa/right/brown,
|
||||
/obj/item/toy/plush/moth{
|
||||
name = "Dr. Moff"
|
||||
},
|
||||
/turf/open/floor/carpet/blue,
|
||||
/area/station/medical/psychology)
|
||||
"ixu" = (
|
||||
/obj/machinery/camera/directional/north{
|
||||
c_tag = "Teleporter"
|
||||
@@ -27766,6 +27717,13 @@
|
||||
},
|
||||
/turf/open/floor/iron/large,
|
||||
/area/station/engineering/main)
|
||||
"ixV" = (
|
||||
/obj/structure/bed/dogbed/mcgriff,
|
||||
/obj/item/food/beef_wellington_slice,
|
||||
/obj/structure/cable,
|
||||
/mob/living/basic/pet/dog/pug/mcgriff,
|
||||
/turf/open/floor/iron/showroomfloor,
|
||||
/area/station/security/warden)
|
||||
"ixZ" = (
|
||||
/obj/machinery/door/airlock/command/glass{
|
||||
name = "Chief Engineer"
|
||||
@@ -28216,13 +28174,6 @@
|
||||
/obj/structure/cable,
|
||||
/turf/open/floor/iron/dark/smooth_half,
|
||||
/area/station/security/prison/work)
|
||||
"iFg" = (
|
||||
/obj/structure/bed/dogbed/mcgriff,
|
||||
/obj/item/food/beef_wellington_slice,
|
||||
/obj/structure/cable,
|
||||
/mob/living/simple_animal/pet/dog/pug/mcgriff,
|
||||
/turf/open/floor/iron/showroomfloor,
|
||||
/area/station/security/warden)
|
||||
"iFm" = (
|
||||
/obj/effect/decal/cleanable/glass,
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
@@ -29742,6 +29693,17 @@
|
||||
/obj/structure/chair/comfy/beige,
|
||||
/turf/open/floor/iron/grimy,
|
||||
/area/station/hallway/secondary/entry)
|
||||
"jbn" = (
|
||||
/obj/effect/turf_decal/siding/wood{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/chair/sofa/left/brown{
|
||||
desc = "Hey, did you know you can get a pineapple on your burger here?";
|
||||
dir = 1;
|
||||
name = "The Regular's Sofa"
|
||||
},
|
||||
/turf/open/floor/stone,
|
||||
/area/station/commons/lounge)
|
||||
"jbt" = (
|
||||
/obj/machinery/light/directional/north,
|
||||
/obj/structure/extinguisher_cabinet/directional/north,
|
||||
@@ -32708,13 +32670,6 @@
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/turf/open/floor/plating,
|
||||
/area/station/ai_monitored/turret_protected/aisat/hallway)
|
||||
"jXB" = (
|
||||
/obj/structure/bed/dogbed/ian,
|
||||
/mob/living/simple_animal/pet/dog/corgi/ian{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/iron,
|
||||
/area/station/command/heads_quarters/hop)
|
||||
"jXD" = (
|
||||
/obj/machinery/light/directional/north,
|
||||
/turf/open/floor/iron,
|
||||
@@ -37441,17 +37396,6 @@
|
||||
dir = 8
|
||||
},
|
||||
/area/station/maintenance/port/fore)
|
||||
"lsl" = (
|
||||
/obj/effect/turf_decal/siding/wood{
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/chair/sofa/right/brown{
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/computer/security/telescreen/entertainment/directional/south,
|
||||
/obj/machinery/airalarm/directional/east,
|
||||
/turf/open/floor/iron/grimy,
|
||||
/area/station/commons/lounge)
|
||||
"lso" = (
|
||||
/turf/open/floor/iron,
|
||||
/area/station/hallway/primary/starboard)
|
||||
@@ -37686,15 +37630,6 @@
|
||||
"lwR" = (
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/mine/living_quarters)
|
||||
"lwS" = (
|
||||
/obj/machinery/computer/order_console/cook{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/station/hallway/secondary/service)
|
||||
"lxc" = (
|
||||
/obj/machinery/door/firedoor,
|
||||
/obj/machinery/door/airlock/public/glass{
|
||||
@@ -38414,14 +38349,6 @@
|
||||
},
|
||||
/turf/open/floor/iron/dark/textured,
|
||||
/area/station/security/prison)
|
||||
"lKf" = (
|
||||
/obj/machinery/computer/order_console/mining,
|
||||
/obj/effect/turf_decal/tile/brown{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/brown,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/cargo/miningdock)
|
||||
"lKk" = (
|
||||
/obj/machinery/disposal/bin,
|
||||
/obj/structure/disposalpipe/trunk{
|
||||
@@ -39984,6 +39911,13 @@
|
||||
},
|
||||
/turf/open/floor/iron,
|
||||
/area/station/commons/dorms)
|
||||
"mmN" = (
|
||||
/obj/structure/window/reinforced{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/chair/sofa/right/brown,
|
||||
/turf/open/floor/carpet/blue,
|
||||
/area/station/security/prison/work)
|
||||
"mmR" = (
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
@@ -41928,6 +41862,14 @@
|
||||
/obj/effect/mapping_helpers/airlock/access/any/science/maintenance,
|
||||
/turf/open/floor/plating,
|
||||
/area/station/maintenance/starboard/aft)
|
||||
"mVT" = (
|
||||
/obj/machinery/computer/order_console/mining,
|
||||
/obj/effect/turf_decal/tile/brown{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/brown,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/cargo/miningdock)
|
||||
"mVY" = (
|
||||
/obj/effect/turf_decal/tile/neutral/diagonal_edge,
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
|
||||
@@ -44681,6 +44623,17 @@
|
||||
/obj/structure/grille,
|
||||
/turf/open/floor/plating,
|
||||
/area/station/maintenance/department/medical/morgue)
|
||||
"nJi" = (
|
||||
/obj/effect/turf_decal/siding/wood{
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/chair/sofa/left/brown{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/landmark/start/hangover,
|
||||
/obj/machinery/light/directional/south,
|
||||
/turf/open/floor/iron/grimy,
|
||||
/area/station/commons/lounge)
|
||||
"nJm" = (
|
||||
/obj/structure/fluff/fokoff_sign,
|
||||
/turf/open/misc/asteroid/snow/icemoon,
|
||||
@@ -46758,6 +46711,16 @@
|
||||
/obj/structure/cable,
|
||||
/turf/open/floor/iron,
|
||||
/area/station/hallway/primary/port)
|
||||
"ont" = (
|
||||
/obj/machinery/door/airlock/public/glass/incinerator/atmos_interior,
|
||||
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
|
||||
/obj/effect/mapping_helpers/airlock/locked,
|
||||
/obj/machinery/airlock_controller/incinerator_atmos{
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos,
|
||||
/turf/open/floor/engine,
|
||||
/area/station/maintenance/disposal/incinerator)
|
||||
"onv" = (
|
||||
/obj/effect/spawner/structure/window/reinforced,
|
||||
/obj/machinery/door/poddoor/shutters/preopen{
|
||||
@@ -48139,6 +48102,15 @@
|
||||
},
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/ai_monitored/turret_protected/ai_upload)
|
||||
"oJU" = (
|
||||
/obj/machinery/computer/order_console/mining,
|
||||
/obj/effect/turf_decal/tile/brown{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/brown,
|
||||
/obj/machinery/light_switch/directional/north,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/cargo/miningdock)
|
||||
"oKv" = (
|
||||
/obj/item/trash/popcorn,
|
||||
/turf/open/floor/plating,
|
||||
@@ -53741,6 +53713,12 @@
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/turf/open/floor/plating,
|
||||
/area/station/maintenance/port/aft)
|
||||
"qAO" = (
|
||||
/obj/structure/chair/sofa/left/brown,
|
||||
/obj/machinery/light/directional/north,
|
||||
/obj/effect/landmark/start/psychologist,
|
||||
/turf/open/floor/carpet/blue,
|
||||
/area/station/medical/psychology)
|
||||
"qAQ" = (
|
||||
/turf/open/floor/engine/vacuum,
|
||||
/area/station/engineering/atmos)
|
||||
@@ -55541,11 +55519,6 @@
|
||||
},
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/security/checkpoint/science)
|
||||
"raG" = (
|
||||
/obj/machinery/dna_infuser,
|
||||
/obj/item/infuser_book,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/science/genetics)
|
||||
"raH" = (
|
||||
/obj/effect/spawner/random/structure/crate,
|
||||
/obj/effect/mapping_helpers/broken_floor,
|
||||
@@ -56445,11 +56418,6 @@
|
||||
},
|
||||
/turf/open/floor/glass/reinforced,
|
||||
/area/station/hallway/primary/starboard)
|
||||
"rrv" = (
|
||||
/obj/structure/chair/sofa/corner/brown,
|
||||
/obj/structure/cable,
|
||||
/turf/open/floor/carpet/blue,
|
||||
/area/station/security/prison/work)
|
||||
"rrx" = (
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
@@ -57454,6 +57422,17 @@
|
||||
/obj/effect/turf_decal/trimline/blue/filled/line,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/medical/medbay/aft)
|
||||
"rHF" = (
|
||||
/obj/machinery/computer/order_console/mining,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/machinery/camera{
|
||||
c_tag = "Mining Bunks";
|
||||
dir = 6
|
||||
},
|
||||
/turf/open/floor/iron/dark/side{
|
||||
dir = 4
|
||||
},
|
||||
/area/mine/production)
|
||||
"rHH" = (
|
||||
/obj/structure/table,
|
||||
/obj/effect/spawner/random/food_or_drink/snack/lizard,
|
||||
@@ -58474,6 +58453,32 @@
|
||||
/obj/machinery/holopad,
|
||||
/turf/open/floor/iron,
|
||||
/area/station/hallway/secondary/entry)
|
||||
"rZC" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/storage/box/monkeycubes{
|
||||
pixel_x = 6;
|
||||
pixel_y = 7
|
||||
},
|
||||
/obj/item/storage/box/monkeycubes{
|
||||
pixel_x = -5
|
||||
},
|
||||
/obj/item/storage/box/bodybags{
|
||||
pixel_x = -1;
|
||||
pixel_y = 6
|
||||
},
|
||||
/obj/item/storage/box/disks{
|
||||
pixel_x = 1;
|
||||
pixel_y = 5
|
||||
},
|
||||
/obj/item/storage/box/monkeycubes{
|
||||
pixel_x = 6;
|
||||
pixel_y = 7
|
||||
},
|
||||
/obj/item/storage/box/monkeycubes{
|
||||
pixel_x = -5
|
||||
},
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/science/genetics)
|
||||
"rZE" = (
|
||||
/obj/machinery/atmospherics/components/binary/pump{
|
||||
dir = 8
|
||||
@@ -58705,6 +58710,19 @@
|
||||
/obj/structure/sign/poster/contraband/random/directional/south,
|
||||
/turf/open/floor/plating,
|
||||
/area/station/maintenance/port/greater)
|
||||
"sdk" = (
|
||||
/obj/structure/chair/sofa/left/brown{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/bar,
|
||||
/obj/effect/turf_decal/tile/bar{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/siding/white{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/iron,
|
||||
/area/station/hallway/secondary/service)
|
||||
"sdl" = (
|
||||
/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{
|
||||
dir = 5
|
||||
@@ -58876,6 +58894,22 @@
|
||||
dir = 5
|
||||
},
|
||||
/area/station/science/research)
|
||||
"sgt" = (
|
||||
/obj/effect/turf_decal/tile/brown,
|
||||
/obj/effect/turf_decal/tile/brown{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/brown{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/airalarm/directional/south,
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/structure/chair/sofa/right/brown{
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/newscaster/directional/east,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/medical/break_room)
|
||||
"sgA" = (
|
||||
/obj/effect/turf_decal/box,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
@@ -60234,17 +60268,6 @@
|
||||
/obj/machinery/chem_mass_spec,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/medical/pharmacy)
|
||||
"sAU" = (
|
||||
/obj/machinery/computer/order_console/mining,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/machinery/camera{
|
||||
c_tag = "Mining Bunks";
|
||||
dir = 6
|
||||
},
|
||||
/turf/open/floor/iron/dark/side{
|
||||
dir = 4
|
||||
},
|
||||
/area/mine/production)
|
||||
"sAV" = (
|
||||
/obj/machinery/firealarm/directional/west,
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
@@ -64224,6 +64247,15 @@
|
||||
/obj/machinery/light/directional/west,
|
||||
/turf/open/floor/iron,
|
||||
/area/mine/laborcamp)
|
||||
"tMC" = (
|
||||
/obj/machinery/computer/order_console/mining,
|
||||
/obj/machinery/light/small/directional/south,
|
||||
/obj/machinery/light_switch/directional/south,
|
||||
/obj/machinery/newscaster/directional/east,
|
||||
/turf/open/floor/iron/dark/side{
|
||||
dir = 4
|
||||
},
|
||||
/area/mine/production)
|
||||
"tMD" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 9
|
||||
@@ -64546,19 +64578,6 @@
|
||||
},
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/science/robotics/lab)
|
||||
"tSj" = (
|
||||
/obj/structure/chair/sofa/left/brown{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/bar,
|
||||
/obj/effect/turf_decal/tile/bar{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/siding/white{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/iron,
|
||||
/area/station/hallway/secondary/service)
|
||||
"tSs" = (
|
||||
/obj/item/flashlight/lantern{
|
||||
on = 1
|
||||
@@ -66161,6 +66180,15 @@
|
||||
/obj/structure/disposalpipe/segment,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/science/research)
|
||||
"urO" = (
|
||||
/obj/machinery/computer/order_console/cook{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/station/hallway/secondary/service)
|
||||
"uso" = (
|
||||
/obj/structure/closet/crate/trashcart,
|
||||
/obj/effect/spawner/random/contraband/prison,
|
||||
@@ -69109,17 +69137,6 @@
|
||||
},
|
||||
/turf/open/floor/plating/snowed/icemoon,
|
||||
/area/icemoon/surface/outdoors/nospawn)
|
||||
"vpK" = (
|
||||
/obj/effect/turf_decal/siding/wood{
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/chair/sofa/left/brown{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/landmark/start/hangover,
|
||||
/obj/machinery/light/directional/south,
|
||||
/turf/open/floor/iron/grimy,
|
||||
/area/station/commons/lounge)
|
||||
"vpR" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/turf/open/floor/iron/dark,
|
||||
@@ -70670,10 +70687,6 @@
|
||||
/obj/machinery/duct,
|
||||
/turf/open/floor/plating,
|
||||
/area/station/maintenance/department/medical/morgue)
|
||||
"vOJ" = (
|
||||
/obj/structure/chair/sofa/middle/brown,
|
||||
/turf/open/floor/carpet/blue,
|
||||
/area/station/security/prison/work)
|
||||
"vPh" = (
|
||||
/obj/machinery/light/directional/north,
|
||||
/turf/open/floor/iron,
|
||||
@@ -71017,17 +71030,6 @@
|
||||
/obj/structure/closet/firecloset,
|
||||
/turf/open/floor/plating,
|
||||
/area/station/maintenance/starboard/lesser)
|
||||
"vTB" = (
|
||||
/obj/machinery/door/airlock/research/glass/incinerator/ordmix_interior{
|
||||
name = "Burn Chamber Interior Airlock"
|
||||
},
|
||||
/obj/effect/mapping_helpers/airlock/locked,
|
||||
/obj/machinery/airlock_controller/incinerator_ordmix{
|
||||
pixel_x = 24
|
||||
},
|
||||
/obj/effect/mapping_helpers/airlock/access/all/science/ordnance,
|
||||
/turf/open/floor/engine,
|
||||
/area/station/science/ordnance/burnchamber)
|
||||
"vTJ" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/toy/plush/slimeplushie{
|
||||
@@ -74828,22 +74830,6 @@
|
||||
"wZj" = (
|
||||
/turf/open/floor/iron/dark/textured,
|
||||
/area/station/security/warden)
|
||||
"wZl" = (
|
||||
/obj/effect/turf_decal/tile/brown,
|
||||
/obj/effect/turf_decal/tile/brown{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/brown{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/airalarm/directional/south,
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/structure/chair/sofa/right/brown{
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/newscaster/directional/east,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/station/medical/break_room)
|
||||
"wZp" = (
|
||||
/obj/item/storage/toolbox/electrical{
|
||||
pixel_x = 4;
|
||||
@@ -76020,6 +76006,11 @@
|
||||
/obj/effect/mapping_helpers/airlock/access/all/service/general,
|
||||
/turf/open/floor/iron/dark/textured,
|
||||
/area/station/hallway/secondary/service)
|
||||
"xqN" = (
|
||||
/obj/machinery/dna_infuser,
|
||||
/obj/item/infuser_book,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/science/genetics)
|
||||
"xqY" = (
|
||||
/obj/machinery/firealarm/directional/east,
|
||||
/turf/open/floor/iron/dark,
|
||||
@@ -78475,6 +78466,15 @@
|
||||
/obj/machinery/computer/holodeck,
|
||||
/turf/open/floor/iron,
|
||||
/area/station/commons/fitness)
|
||||
"yfZ" = (
|
||||
/obj/structure/chair/sofa/right/brown{
|
||||
desc = "Hey, did you know you can get a pineapple on your burger here?";
|
||||
dir = 1;
|
||||
name = "The Regular's Sofa"
|
||||
},
|
||||
/obj/effect/landmark/start/hangover,
|
||||
/turf/open/floor/stone,
|
||||
/area/station/commons/lounge)
|
||||
"ygd" = (
|
||||
/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{
|
||||
dir = 4
|
||||
@@ -164037,8 +164037,8 @@ pve
|
||||
vSi
|
||||
kZu
|
||||
pAT
|
||||
sAU
|
||||
bms
|
||||
rHF
|
||||
tMC
|
||||
kZu
|
||||
aNg
|
||||
kzH
|
||||
@@ -169345,7 +169345,7 @@ iDt
|
||||
hPs
|
||||
gBX
|
||||
hPs
|
||||
gOc
|
||||
mmN
|
||||
vxM
|
||||
vnT
|
||||
una
|
||||
@@ -169602,7 +169602,7 @@ iDt
|
||||
iDt
|
||||
iDt
|
||||
oqL
|
||||
vOJ
|
||||
hlz
|
||||
gBc
|
||||
erY
|
||||
clR
|
||||
@@ -169859,8 +169859,8 @@ iDt
|
||||
iDt
|
||||
iDt
|
||||
oqL
|
||||
rrv
|
||||
hsE
|
||||
acP
|
||||
cuh
|
||||
pdT
|
||||
klv
|
||||
cIc
|
||||
@@ -179409,8 +179409,8 @@ udC
|
||||
udC
|
||||
xMq
|
||||
mdZ
|
||||
tSj
|
||||
hXp
|
||||
sdk
|
||||
gEl
|
||||
mdZ
|
||||
oGR
|
||||
pIQ
|
||||
@@ -179681,7 +179681,7 @@ ydZ
|
||||
jBU
|
||||
mqr
|
||||
mqr
|
||||
vpK
|
||||
nJi
|
||||
dMS
|
||||
rZN
|
||||
cjK
|
||||
@@ -179938,7 +179938,7 @@ lrN
|
||||
jBU
|
||||
eDi
|
||||
doJ
|
||||
lsl
|
||||
hiB
|
||||
dMS
|
||||
dre
|
||||
dMS
|
||||
@@ -181736,7 +181736,7 @@ hzQ
|
||||
hzQ
|
||||
nro
|
||||
hzQ
|
||||
bps
|
||||
jbn
|
||||
dMS
|
||||
dEB
|
||||
dMS
|
||||
@@ -181993,7 +181993,7 @@ wun
|
||||
dOQ
|
||||
lZG
|
||||
fDt
|
||||
fTu
|
||||
yfZ
|
||||
dMS
|
||||
dEB
|
||||
dMS
|
||||
@@ -193848,7 +193848,7 @@ sDA
|
||||
mYd
|
||||
mIC
|
||||
aWs
|
||||
vTB
|
||||
bsR
|
||||
qSk
|
||||
qSk
|
||||
rEh
|
||||
@@ -229568,8 +229568,8 @@ ajw
|
||||
maT
|
||||
maT
|
||||
qjQ
|
||||
fPs
|
||||
lKf
|
||||
oJU
|
||||
mVT
|
||||
qjQ
|
||||
fZb
|
||||
qjQ
|
||||
@@ -236444,7 +236444,7 @@ cMA
|
||||
wkr
|
||||
eRO
|
||||
ven
|
||||
iFg
|
||||
ixV
|
||||
kyy
|
||||
kTz
|
||||
lbk
|
||||
@@ -236756,7 +236756,7 @@ cqQ
|
||||
jRC
|
||||
nvs
|
||||
edW
|
||||
jXB
|
||||
eAI
|
||||
cpm
|
||||
bHy
|
||||
ylU
|
||||
@@ -245979,7 +245979,7 @@ gzw
|
||||
kiB
|
||||
kQX
|
||||
xLn
|
||||
lwS
|
||||
urO
|
||||
mdZ
|
||||
rth
|
||||
hid
|
||||
@@ -248620,7 +248620,7 @@ uqH
|
||||
qXk
|
||||
qSC
|
||||
ldr
|
||||
fIv
|
||||
ont
|
||||
mgD
|
||||
pmb
|
||||
hPD
|
||||
@@ -249112,7 +249112,7 @@ tQc
|
||||
tQc
|
||||
qQp
|
||||
hRA
|
||||
ixm
|
||||
dOt
|
||||
rkL
|
||||
cga
|
||||
rTv
|
||||
@@ -249369,7 +249369,7 @@ iML
|
||||
iML
|
||||
nHX
|
||||
hRA
|
||||
cih
|
||||
qAO
|
||||
rkL
|
||||
uFz
|
||||
kJC
|
||||
@@ -250912,7 +250912,7 @@ dpr
|
||||
klk
|
||||
vxE
|
||||
hyd
|
||||
hyS
|
||||
cjd
|
||||
tMO
|
||||
jYy
|
||||
sZF
|
||||
@@ -251169,7 +251169,7 @@ aFR
|
||||
lVR
|
||||
rbK
|
||||
tsY
|
||||
wZl
|
||||
sgt
|
||||
tMO
|
||||
cAA
|
||||
sZF
|
||||
@@ -258858,7 +258858,7 @@ pUy
|
||||
eSJ
|
||||
pUy
|
||||
mzG
|
||||
dyO
|
||||
rZC
|
||||
sca
|
||||
xiC
|
||||
ciS
|
||||
@@ -259372,7 +259372,7 @@ ouX
|
||||
ero
|
||||
itj
|
||||
fXu
|
||||
raG
|
||||
xqN
|
||||
mEJ
|
||||
oXJ
|
||||
fbl
|
||||
|
||||
+1213
-1213
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -56,7 +56,7 @@
|
||||
/turf/closed/mineral/random/stationside/asteroid/porus,
|
||||
/area/station/maintenance/department/crew_quarters/dorms)
|
||||
"fL" = (
|
||||
/mob/living/simple_animal/pet/dog/bullterrier{
|
||||
/mob/living/basic/pet/dog/bullterrier{
|
||||
desc = "walter";
|
||||
name = "walter"
|
||||
},
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -165,6 +165,7 @@
|
||||
#define BB_DOG_PLAYING_DEAD "BB_DOG_PLAYING_DEAD"
|
||||
#define BB_DOG_HARASS_TARGET "BB_DOG_HARASS_TARGET"
|
||||
#define BB_DOG_HARASS_FRUSTRATION "BB_DOG_HARASS_FRUSTRATION"
|
||||
#define BB_DOG_IS_SLOW "BB_DOG_IS_SLOW"
|
||||
|
||||
/// Basically, what is our vision/hearing range for picking up on things to fetch/
|
||||
#define AI_DOG_VISION_RANGE 10
|
||||
@@ -222,6 +223,14 @@
|
||||
///list of foods this mob likes
|
||||
#define BB_BASIC_FOODS "BB_basic_foods"
|
||||
|
||||
///Baby-making blackboard
|
||||
///Types of animal we can make babies with.
|
||||
#define BB_BABIES_PARTNER_TYPES "BB_babies_partner"
|
||||
///Types of animal that we make as a baby.
|
||||
#define BB_BABIES_CHILD_TYPES "BB_babies_child"
|
||||
///Current partner target
|
||||
#define BB_BABIES_TARGET "BB_babies_target"
|
||||
|
||||
///Bileworm AI keys
|
||||
|
||||
#define BB_BILEWORM_SPEW_BILE "BB_bileworm_spew_bile"
|
||||
|
||||
@@ -40,6 +40,8 @@
|
||||
#define COMSIG_LIVING_TRY_SYRINGE "living_try_syringe"
|
||||
///From living/Life(). (deltatime, times_fired)
|
||||
#define COMSIG_LIVING_LIFE "living_life"
|
||||
///From living/set_resting(): (new_resting, silent, instant)
|
||||
#define COMSIG_LIVING_RESTING "living_resting"
|
||||
|
||||
///from base of element/bane/activate(): (item/weapon, mob/user)
|
||||
#define COMSIG_LIVING_BANED "living_baned"
|
||||
@@ -47,6 +49,10 @@
|
||||
///from base of mob/living/death(): (gibbed)
|
||||
#define COMSIG_LIVING_DEATH "living_death"
|
||||
|
||||
///from base of mob/living/gib(): (no_brain, no_organs, no_bodyparts)
|
||||
///Note that it is fired regardless of whether the mob was dead beforehand or not.
|
||||
#define COMSIG_LIVING_GIBBED "living_gibbed"
|
||||
|
||||
///from base of mob/living/Write_Memory(): (dead, gibbed)
|
||||
#define COMSIG_LIVING_WRITE_MEMORY "living_write_memory"
|
||||
#define COMPONENT_DONT_WRITE_MEMORY (1<<0)
|
||||
|
||||
@@ -148,9 +148,9 @@ GLOBAL_LIST_INIT(turfs_openspace, typecacheof(list(
|
||||
|
||||
#define iscat(A) (istype(A, /mob/living/simple_animal/pet/cat))
|
||||
|
||||
#define isdog(A) (istype(A, /mob/living/simple_animal/pet/dog))
|
||||
#define isdog(A) (istype(A, /mob/living/basic/pet/dog))
|
||||
|
||||
#define iscorgi(A) (istype(A, /mob/living/simple_animal/pet/dog/corgi))
|
||||
#define iscorgi(A) (istype(A, /mob/living/basic/pet/dog/corgi))
|
||||
|
||||
#define ishostile(A) (istype(A, /mob/living/simple_animal/hostile))
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
#define STRIPPABLE_ITEM_RHAND "right_hand"
|
||||
#define STRIPPABLE_ITEM_HANDCUFFS "handcuffs"
|
||||
#define STRIPPABLE_ITEM_LEGCUFFS "legcuffs"
|
||||
#define STRIPPABLE_ITEM_CORGI_COLLAR "corgi_collar"
|
||||
#define STRIPPABLE_ITEM_PET_COLLAR "pet_collar"
|
||||
#define STRIPPABLE_ITEM_PARROT_HEADSET "parrot_headset"
|
||||
|
||||
/// This slot is not obscured.
|
||||
|
||||
@@ -0,0 +1,77 @@
|
||||
/**
|
||||
* Find a compatible, living partner, if we're also alone.
|
||||
*/
|
||||
/datum/ai_behavior/find_partner
|
||||
action_cooldown = 40 SECONDS
|
||||
|
||||
/// Range to look.
|
||||
var/range = 7
|
||||
|
||||
/// Maximum number of children
|
||||
var/max_children = 3
|
||||
|
||||
/datum/ai_behavior/find_partner/perform(delta_time, datum/ai_controller/controller, target_key, partner_types_key, child_types_key)
|
||||
. = ..()
|
||||
|
||||
var/mob/pawn_mob = controller.pawn
|
||||
var/list/partner_types = controller.blackboard[partner_types_key]
|
||||
var/list/child_types = controller.blackboard[child_types_key]
|
||||
|
||||
var/mob/living/partner
|
||||
var/children = 0
|
||||
for(var/mob/other in oview(range, pawn_mob))
|
||||
if(other.stat != CONSCIOUS) //Check if it's conscious FIRST.
|
||||
continue
|
||||
var/is_child = is_type_in_list(other, child_types)
|
||||
if(is_child) //Check for children SECOND.
|
||||
children++
|
||||
else if(is_type_in_list(other, partner_types))
|
||||
if(other.ckey)
|
||||
continue
|
||||
else if(!is_child && other.gender == MALE && !(other.flags_1 & HOLOGRAM_1)) //Better safe than sorry ;_;
|
||||
partner = other
|
||||
|
||||
//shyness check. we're not shy in front of things that share a faction with us.
|
||||
else if(isliving(other) && !pawn_mob.faction_check_mob(other))
|
||||
finish_action(controller, FALSE)
|
||||
return
|
||||
|
||||
if(partner && children < max_children)
|
||||
controller.blackboard[target_key] = WEAKREF(partner)
|
||||
|
||||
finish_action(controller, TRUE)
|
||||
|
||||
/**
|
||||
* Reproduce.
|
||||
*/
|
||||
/datum/ai_behavior/make_babies
|
||||
action_cooldown = 40 SECONDS
|
||||
behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT
|
||||
|
||||
/datum/ai_behavior/make_babies/setup(datum/ai_controller/controller, target_key, child_types_key)
|
||||
var/datum/weakref/weak_target = controller.blackboard[target_key]
|
||||
var/atom/target = weak_target?.resolve()
|
||||
if(!target)
|
||||
return FALSE
|
||||
controller.current_movement_target = target
|
||||
return TRUE
|
||||
|
||||
/datum/ai_behavior/make_babies/perform(delta_time, datum/ai_controller/controller, target_key, child_types_key)
|
||||
. = ..()
|
||||
var/datum/weakref/weak_target = controller.blackboard[target_key]
|
||||
var/mob/target = weak_target?.resolve()
|
||||
if(!target || target.stat != CONSCIOUS)
|
||||
finish_action(controller, FALSE, target_key)
|
||||
return
|
||||
|
||||
var/child_type = pick_weight(controller.blackboard[child_types_key])
|
||||
var/turf/turf_loc = get_turf(controller.pawn.loc)
|
||||
if(turf_loc)
|
||||
new child_type(turf_loc)
|
||||
|
||||
finish_action(controller, TRUE, target_key)
|
||||
|
||||
/datum/ai_behavior/make_babies/finish_action(datum/ai_controller/controller, succeeded, target_key)
|
||||
. = ..()
|
||||
|
||||
controller.blackboard -= target_key
|
||||
@@ -0,0 +1,34 @@
|
||||
/**
|
||||
* Reproduce with a similar mob.
|
||||
*/
|
||||
/datum/ai_planning_subtree/make_babies
|
||||
var/chance = 5
|
||||
|
||||
/datum/ai_planning_subtree/make_babies/SelectBehaviors(datum/ai_controller/controller, delta_time)
|
||||
. = ..()
|
||||
|
||||
if(controller.pawn.gender != FEMALE || !DT_PROB(chance, delta_time))
|
||||
return
|
||||
|
||||
var/partner_types = controller.blackboard[BB_BABIES_PARTNER_TYPES]
|
||||
var/baby_types = controller.blackboard[BB_BABIES_CHILD_TYPES]
|
||||
|
||||
if(!partner_types || !baby_types)
|
||||
return
|
||||
|
||||
// Baby can't reproduce
|
||||
if(is_type_in_list(controller.pawn, baby_types))
|
||||
return
|
||||
|
||||
var/datum/weakref/weak_target = controller.blackboard[BB_BABIES_TARGET]
|
||||
var/atom/target = weak_target?.resolve()
|
||||
|
||||
// Find target
|
||||
if(!target || QDELETED(target))
|
||||
controller.queue_behavior(/datum/ai_behavior/find_partner, BB_BABIES_TARGET, BB_BABIES_PARTNER_TYPES, BB_BABIES_CHILD_TYPES)
|
||||
return
|
||||
|
||||
// Do target
|
||||
if(target)
|
||||
controller.queue_behavior(/datum/ai_behavior/make_babies, BB_BABIES_TARGET, BB_BABIES_CHILD_TYPES)
|
||||
return SUBTREE_RETURN_FINISH_PLANNING
|
||||
@@ -89,3 +89,16 @@
|
||||
/datum/ai_planning_subtree/random_speech/cow/wisdom/New()
|
||||
. = ..()
|
||||
speak = GLOB.wisdoms //Done here so it's setup properly
|
||||
|
||||
/datum/ai_planning_subtree/random_speech/dog
|
||||
speech_chance = 1
|
||||
|
||||
/datum/ai_planning_subtree/random_speech/dog/SelectBehaviors(datum/ai_controller/controller, delta_time)
|
||||
if(!isdog(controller.pawn))
|
||||
return
|
||||
|
||||
// Stay in sync with dog fashion.
|
||||
var/mob/living/basic/pet/dog/dog_pawn = controller.pawn
|
||||
dog_pawn.update_dog_speech(src)
|
||||
|
||||
return ..()
|
||||
|
||||
@@ -1,17 +1,22 @@
|
||||
/datum/ai_controller/dog
|
||||
blackboard = list(\
|
||||
BB_SIMPLE_CARRY_ITEM = null,\
|
||||
BB_FETCH_TARGET = null,\
|
||||
BB_FETCH_DELIVER_TO = null,\
|
||||
BB_DOG_FRIENDS = list(),\
|
||||
BB_FETCH_IGNORE_LIST = list(),\
|
||||
BB_DOG_ORDER_MODE = DOG_COMMAND_NONE,\
|
||||
BB_DOG_PLAYING_DEAD = FALSE,\
|
||||
BB_DOG_HARASS_TARGET = null,\
|
||||
BB_DOG_HARASS_FRUSTRATION = null,\
|
||||
BB_VISION_RANGE = AI_DOG_VISION_RANGE)
|
||||
blackboard = list(
|
||||
BB_SIMPLE_CARRY_ITEM = null,
|
||||
BB_FETCH_TARGET = null,
|
||||
BB_FETCH_DELIVER_TO = null,
|
||||
BB_DOG_FRIENDS = list(),
|
||||
BB_FETCH_IGNORE_LIST = list(),
|
||||
BB_DOG_ORDER_MODE = DOG_COMMAND_NONE,
|
||||
BB_DOG_PLAYING_DEAD = FALSE,
|
||||
BB_DOG_HARASS_TARGET = null,
|
||||
BB_DOG_HARASS_FRUSTRATION = null,
|
||||
BB_VISION_RANGE = AI_DOG_VISION_RANGE,
|
||||
)
|
||||
ai_movement = /datum/ai_movement/jps
|
||||
planning_subtrees = list(/datum/ai_planning_subtree/dog)
|
||||
idle_behavior = /datum/idle_behavior/idle_dog
|
||||
planning_subtrees = list(
|
||||
/datum/ai_planning_subtree/random_speech/dog,
|
||||
/datum/ai_planning_subtree/dog,
|
||||
)
|
||||
|
||||
COOLDOWN_DECLARE(heel_cooldown)
|
||||
COOLDOWN_DECLARE(command_cooldown)
|
||||
@@ -51,13 +56,6 @@
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
/datum/ai_controller/dog/get_access()
|
||||
var/mob/living/simple_animal/simple_pawn = pawn
|
||||
if(!istype(simple_pawn))
|
||||
return
|
||||
|
||||
return simple_pawn.access_card
|
||||
|
||||
/// Someone has thrown something, see if it's someone we care about and start listening to the thrown item so we can see if we want to fetch it when it lands
|
||||
/datum/ai_controller/dog/proc/listened_throw(datum/source, mob/living/carbon/carbon_thrower)
|
||||
SIGNAL_HANDLER
|
||||
@@ -285,3 +283,37 @@
|
||||
if(living_pawn.buckled)
|
||||
queue_behavior(/datum/ai_behavior/resist)//in case they are in bed or something
|
||||
queue_behavior(/datum/ai_behavior/harass)
|
||||
|
||||
|
||||
/**
|
||||
* Same thing but with make tiny corgis and use access cards.
|
||||
*/
|
||||
/datum/ai_controller/dog/corgi
|
||||
blackboard = list(
|
||||
BB_SIMPLE_CARRY_ITEM = null,
|
||||
BB_FETCH_TARGET = null,
|
||||
BB_FETCH_DELIVER_TO = null,
|
||||
BB_DOG_FRIENDS = list(),
|
||||
BB_FETCH_IGNORE_LIST = list(),
|
||||
BB_DOG_ORDER_MODE = DOG_COMMAND_NONE,
|
||||
BB_DOG_PLAYING_DEAD = FALSE,
|
||||
BB_DOG_HARASS_TARGET = null,
|
||||
BB_DOG_HARASS_FRUSTRATION = null,
|
||||
BB_VISION_RANGE = AI_DOG_VISION_RANGE,
|
||||
|
||||
BB_BABIES_PARTNER_TYPES = list(/mob/living/basic/pet/dog),
|
||||
BB_BABIES_CHILD_TYPES = list(/mob/living/basic/pet/dog/corgi/puppy = 95, /mob/living/basic/pet/dog/corgi/puppy/void = 5),
|
||||
)
|
||||
|
||||
planning_subtrees = list(
|
||||
/datum/ai_planning_subtree/random_speech/dog,
|
||||
/datum/ai_planning_subtree/make_babies,
|
||||
/datum/ai_planning_subtree/dog,
|
||||
)
|
||||
|
||||
/datum/ai_controller/dog/corgi/get_access()
|
||||
var/mob/living/basic/pet/dog/corgi/corgi_pawn = pawn
|
||||
if(!istype(corgi_pawn))
|
||||
return
|
||||
|
||||
return corgi_pawn.access_card
|
||||
|
||||
@@ -13,9 +13,12 @@
|
||||
var/obj/item/carry_item = controller.blackboard[BB_SIMPLE_CARRY_ITEM]
|
||||
living_pawn.visible_message(span_notice("[living_pawn] gently teethes on \the [carry_item] in [living_pawn.p_their()] mouth."), vision_distance=COMBAT_MESSAGE_RANGE)
|
||||
|
||||
if(DT_PROB(5, delta_time) && (living_pawn.mobility_flags & MOBILITY_MOVE))
|
||||
// Custom movement rate, for old corgis, etc.
|
||||
var/move_chance = controller.blackboard[BB_DOG_IS_SLOW] ? 2.5 : 5
|
||||
|
||||
if(DT_PROB(move_chance, delta_time) && (living_pawn.mobility_flags & MOBILITY_MOVE))
|
||||
var/move_dir = pick(GLOB.alldirs)
|
||||
living_pawn.Move(get_step(living_pawn, move_dir), move_dir)
|
||||
else if(DT_PROB(10, delta_time))
|
||||
living_pawn.manual_emote(pick("dances around.","chases [living_pawn.p_their()] tail!"))
|
||||
else if(DT_PROB(2, delta_time))
|
||||
living_pawn.manual_emote(pick("dances around.", "chases [living_pawn.p_their()] tail!"))
|
||||
living_pawn.AddComponent(/datum/component/spinny)
|
||||
|
||||
@@ -170,7 +170,7 @@
|
||||
for(var/mob/M in oview(owner, 7))
|
||||
if(!isliving(M)) //ghosts ain't people
|
||||
continue
|
||||
if((istype(M, /mob/living/simple_animal/pet)) || M.ckey)
|
||||
if(istype(M, /mob/living/simple_animal/pet) || istype(M, /mob/living/basic/pet) || M.ckey)
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
GLOBAL_LIST_INIT(creamable, typecacheof(list(
|
||||
/mob/living/carbon/human,
|
||||
/mob/living/simple_animal/pet/dog/corgi,
|
||||
/mob/living/basic/pet/dog/corgi,
|
||||
/mob/living/silicon/ai)))
|
||||
|
||||
/**
|
||||
|
||||
@@ -268,7 +268,7 @@
|
||||
stage3 = list("<span class='danger'>Must... eat... chocolate....</span>", "<span class='danger'>YAP</span>")
|
||||
stage4 = list("<span class='danger'>Visions of washing machines assail your mind!</span>")
|
||||
stage5 = list("<span class='danger'>AUUUUUU!!!</span>")
|
||||
new_form = /mob/living/simple_animal/pet/dog/corgi
|
||||
new_form = /mob/living/basic/pet/dog/corgi
|
||||
|
||||
|
||||
/datum/disease/transformation/corgi/stage_act(delta_time, times_fired)
|
||||
|
||||
@@ -17,20 +17,22 @@
|
||||
name = replacetext(name, "REAL_NAME", M.real_name)
|
||||
desc = replacetext(desc, "NAME", name)
|
||||
|
||||
/datum/dog_fashion/proc/apply(mob/living/simple_animal/pet/dog/D)
|
||||
/datum/dog_fashion/proc/apply(mob/living/basic/pet/dog/D)
|
||||
if(name)
|
||||
D.name = name
|
||||
if(desc)
|
||||
D.desc = desc
|
||||
if(emote_see)
|
||||
D.emote_see = string_list(emote_see)
|
||||
if(emote_hear)
|
||||
D.emote_hear = string_list(emote_hear)
|
||||
if(speak)
|
||||
D.speak = string_list(speak)
|
||||
if(speak_emote)
|
||||
D.speak_emote = string_list(speak_emote)
|
||||
|
||||
/datum/dog_fashion/proc/apply_to_speech(datum/ai_planning_subtree/random_speech/speech)
|
||||
if(emote_see)
|
||||
speech.emote_see = string_list(emote_see)
|
||||
if(emote_hear)
|
||||
speech.emote_hear = string_list(emote_hear)
|
||||
if(speak)
|
||||
speech.speak = string_list(speak)
|
||||
|
||||
/datum/dog_fashion/proc/get_overlay(dir)
|
||||
if(icon_file && obj_icon_state)
|
||||
var/image/corgI = image(icon_file, obj_icon_state, dir = dir)
|
||||
|
||||
@@ -377,7 +377,7 @@
|
||||
nonhuman_mobtype = /mob/living/simple_animal/hostile/gorilla
|
||||
|
||||
/datum/preset_holoimage/corgi
|
||||
nonhuman_mobtype = /mob/living/simple_animal/pet/dog/corgi
|
||||
nonhuman_mobtype = /mob/living/basic/pet/dog/corgi
|
||||
|
||||
/datum/preset_holoimage/clown
|
||||
outfit_type = /datum/outfit/job/clown
|
||||
|
||||
@@ -66,9 +66,9 @@
|
||||
/mob/living/simple_animal/hostile/megafauna/dragon/lesser,
|
||||
/mob/living/simple_animal/hostile/gorilla,
|
||||
/mob/living/simple_animal/parrot,
|
||||
/mob/living/simple_animal/pet/dog/corgi,
|
||||
/mob/living/basic/pet/dog/corgi,
|
||||
/mob/living/simple_animal/crab,
|
||||
/mob/living/simple_animal/pet/dog/pug,
|
||||
/mob/living/basic/pet/dog/pug,
|
||||
/mob/living/simple_animal/pet/cat,
|
||||
/mob/living/basic/mouse,
|
||||
/mob/living/simple_animal/chicken,
|
||||
@@ -77,7 +77,7 @@
|
||||
/mob/living/simple_animal/pet/fox,
|
||||
/mob/living/simple_animal/butterfly,
|
||||
/mob/living/simple_animal/pet/cat/cak,
|
||||
/mob/living/simple_animal/pet/dog/breaddog,
|
||||
/mob/living/basic/pet/dog/breaddog,
|
||||
/mob/living/simple_animal/chick,
|
||||
/mob/living/basic/cow/wisdom,
|
||||
/obj/item/skub,
|
||||
|
||||
@@ -43,8 +43,8 @@
|
||||
report_message = "Ian has gone exploring somewhere in the station."
|
||||
|
||||
/datum/station_trait/ian_adventure/on_round_start()
|
||||
for(var/mob/living/simple_animal/pet/dog/corgi/dog in GLOB.mob_list)
|
||||
if(!(istype(dog, /mob/living/simple_animal/pet/dog/corgi/ian) || istype(dog, /mob/living/simple_animal/pet/dog/corgi/puppy/ian)))
|
||||
for(var/mob/living/basic/pet/dog/corgi/dog in GLOB.mob_list)
|
||||
if(!(istype(dog, /mob/living/basic/pet/dog/corgi/ian) || istype(dog, /mob/living/basic/pet/dog/corgi/puppy/ian)))
|
||||
continue
|
||||
|
||||
// Makes this station trait more interesting. Ian probably won't go anywhere without a little external help.
|
||||
@@ -64,7 +64,7 @@
|
||||
do_smoke(location=adventure_turf)
|
||||
|
||||
/// Moves the new dog somewhere safe, equips it with the old one's inventory and makes it deadchat_playable.
|
||||
/datum/station_trait/ian_adventure/proc/do_corgi_respawn(mob/living/simple_animal/pet/dog/corgi/old_dog, mob/living/simple_animal/pet/dog/corgi/new_dog, gibbed, lives_left)
|
||||
/datum/station_trait/ian_adventure/proc/do_corgi_respawn(mob/living/basic/pet/dog/corgi/old_dog, mob/living/basic/pet/dog/corgi/new_dog, gibbed, lives_left)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
var/turf/current_turf = get_turf(new_dog)
|
||||
|
||||
@@ -276,6 +276,10 @@ GLOBAL_LIST_INIT(dye_registry, list(
|
||||
investigate_log("has been gibbed by a washing machine.", INVESTIGATE_DEATHS)
|
||||
gib()
|
||||
|
||||
/mob/living/basic/pet/machine_wash(obj/machinery/washing_machine/washer)
|
||||
washer.bloody_mess = TRUE
|
||||
gib()
|
||||
|
||||
/obj/item/machine_wash(obj/machinery/washing_machine/washer)
|
||||
if(washer.color_source)
|
||||
dye_item(washer.color_source.dye_color)
|
||||
@@ -369,7 +373,7 @@ GLOBAL_LIST_INIT(dye_registry, list(
|
||||
if(L.buckled || L.has_buckled_mobs())
|
||||
return
|
||||
if(state_open)
|
||||
if(istype(L, /mob/living/simple_animal/pet))
|
||||
if(istype(L, /mob/living/simple_animal/pet) || istype(L, /mob/living/basic/pet))
|
||||
L.forceMove(src)
|
||||
update_appearance()
|
||||
return
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
return ..()
|
||||
|
||||
/obj/effect/gibspawner/generic/animal
|
||||
gib_mob_type = /mob/living/simple_animal/pet
|
||||
gib_mob_type = /mob/living/basic/pet
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -98,7 +98,7 @@
|
||||
S.add_atom_colour(newcolor, FIXED_COLOUR_PRIORITY)
|
||||
return TRUE
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/petrify(statue_timer)
|
||||
/mob/living/basic/pet/dog/corgi/petrify(statue_timer)
|
||||
if(!isturf(loc))
|
||||
return FALSE
|
||||
var/obj/structure/statue/petrified/S = new (loc, src, statue_timer)
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
possible_shapes = list(
|
||||
/mob/living/basic/mouse,
|
||||
/mob/living/simple_animal/pet/dog/corgi,
|
||||
/mob/living/basic/pet/dog/corgi,
|
||||
/mob/living/simple_animal/hostile/carp,
|
||||
/mob/living/simple_animal/bot/secbot,
|
||||
/mob/living/simple_animal/pet/fox,
|
||||
|
||||
@@ -19,8 +19,8 @@
|
||||
/// Possible heads mapped to their pet type. Can be a list of possible pets
|
||||
var/list/possible_heads = list(
|
||||
JOB_HEAD_OF_PERSONNEL = list(
|
||||
/mob/living/simple_animal/pet/dog/corgi/ian,
|
||||
/mob/living/simple_animal/pet/dog/corgi/puppy/ian
|
||||
/mob/living/basic/pet/dog/corgi/ian,
|
||||
/mob/living/basic/pet/dog/corgi/puppy/ian
|
||||
),
|
||||
JOB_CAPTAIN = /mob/living/simple_animal/pet/fox/renault,
|
||||
JOB_CHIEF_MEDICAL_OFFICER = /mob/living/simple_animal/pet/cat/runtime,
|
||||
@@ -57,7 +57,7 @@
|
||||
/mob/living/simple_animal/hostile/retaliate/bat/sgt_araneus
|
||||
),
|
||||
JOB_WARDEN = list(
|
||||
/mob/living/simple_animal/pet/dog/pug/mcgriff
|
||||
/mob/living/basic/pet/dog/pug/mcgriff
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
one dog from the millions of Ian's noble bloodline. Comes with a cute collar!"
|
||||
cost = CARGO_CRATE_VALUE * 10
|
||||
access_view = ACCESS_HOP
|
||||
contains = list(/mob/living/simple_animal/pet/dog/corgi,
|
||||
contains = list(/mob/living/basic/pet/dog/corgi,
|
||||
/obj/item/clothing/neck/petcollar,
|
||||
)
|
||||
crate_name = "corgi crate"
|
||||
@@ -69,10 +69,10 @@
|
||||
/datum/supply_pack/critter/corgi/generate()
|
||||
. = ..()
|
||||
if(prob(50))
|
||||
var/mob/living/simple_animal/pet/dog/corgi/D = locate() in .
|
||||
var/mob/living/basic/pet/dog/corgi/D = locate() in .
|
||||
if(D.gender == FEMALE)
|
||||
qdel(D)
|
||||
new /mob/living/simple_animal/pet/dog/corgi/lisa(.)
|
||||
new /mob/living/basic/pet/dog/corgi/lisa(.)
|
||||
|
||||
/datum/supply_pack/critter/cow
|
||||
name = "Cow Crate"
|
||||
@@ -123,7 +123,7 @@
|
||||
desc = "Corgi fit for a king, this corgi comes in a unique color to signify their superiority. \
|
||||
Comes with a cute collar!"
|
||||
cost = CARGO_CRATE_VALUE * 11
|
||||
contains = list(/mob/living/simple_animal/pet/dog/corgi/exoticcorgi,
|
||||
contains = list(/mob/living/basic/pet/dog/corgi/exoticcorgi,
|
||||
/obj/item/clothing/neck/petcollar,
|
||||
)
|
||||
crate_name = "exotic corgi crate"
|
||||
@@ -166,7 +166,7 @@
|
||||
name = "Pug Crate"
|
||||
desc = "Like a normal dog, but... squished. Contains one pug. Comes with a nice collar!"
|
||||
cost = CARGO_CRATE_VALUE * 10
|
||||
contains = list(/mob/living/simple_animal/pet/dog/pug,
|
||||
contains = list(/mob/living/basic/pet/dog/pug,
|
||||
/obj/item/clothing/neck/petcollar,
|
||||
)
|
||||
crate_name = "pug crate"
|
||||
@@ -176,7 +176,7 @@
|
||||
desc = "Like a normal dog, but with a head the shape of an egg. Contains one bull terrier. \
|
||||
Comes with a nice collar!"
|
||||
cost = CARGO_CRATE_VALUE * 10
|
||||
contains = list(/mob/living/simple_animal/pet/dog/bullterrier,
|
||||
contains = list(/mob/living/basic/pet/dog/bullterrier,
|
||||
/obj/item/clothing/neck/petcollar,
|
||||
)
|
||||
crate_name = "bull terrier crate"
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
GLOBAL_LIST_INIT(high_priority_sentience, typecacheof(list(
|
||||
/mob/living/basic/pet,
|
||||
/mob/living/simple_animal/pet,
|
||||
/mob/living/simple_animal/parrot,
|
||||
/mob/living/simple_animal/hostile/lizard,
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
if(b)
|
||||
new /obj/item/storage/spooky(b)
|
||||
|
||||
for(var/mob/living/simple_animal/pet/dog/corgi/ian/Ian in GLOB.mob_living_list)
|
||||
for(var/mob/living/basic/pet/dog/corgi/ian/Ian in GLOB.mob_living_list)
|
||||
Ian.place_on_head(new /obj/item/bedsheet(Ian))
|
||||
for(var/mob/living/simple_animal/parrot/poly/Poly in GLOB.mob_living_list)
|
||||
new /mob/living/simple_animal/parrot/poly/ghost(Poly.loc)
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
description = "We need to see how the body functions from the earliest moments. Some cytology experiments will help us gain this understanding."
|
||||
total_requirement = 3
|
||||
max_requirement_per_type = 2
|
||||
possible_types = list(/mob/living/simple_animal/hostile/carp, /mob/living/simple_animal/hostile/retaliate/snake, /mob/living/simple_animal/pet/cat, /mob/living/simple_animal/pet/dog/corgi, /mob/living/basic/cow, /mob/living/simple_animal/chicken)
|
||||
possible_types = list(/mob/living/simple_animal/hostile/carp, /mob/living/simple_animal/hostile/retaliate/snake, /mob/living/simple_animal/pet/cat, /mob/living/basic/pet/dog/corgi, /mob/living/basic/cow, /mob/living/simple_animal/chicken)
|
||||
|
||||
/datum/experiment/scanning/random/cytology/medium/one
|
||||
name = "Advanced Cytology Scanning Experiment One"
|
||||
|
||||
@@ -95,7 +95,7 @@ GLOBAL_LIST_INIT(adventure_loot_generator_index,generate_generator_index())
|
||||
/datum/adventure_loot_generator/pet
|
||||
id = "pets"
|
||||
var/carrier_type = /obj/item/pet_carrier/biopod
|
||||
var/list/possible_pets = list(/mob/living/simple_animal/pet/cat/space,/mob/living/simple_animal/pet/dog/corgi,/mob/living/simple_animal/pet/penguin/baby,/mob/living/simple_animal/pet/dog/pug)
|
||||
var/list/possible_pets = list(/mob/living/simple_animal/pet/cat/space,/mob/living/basic/pet/dog/corgi,/mob/living/simple_animal/pet/penguin/baby,/mob/living/basic/pet/dog/pug)
|
||||
|
||||
/datum/adventure_loot_generator/pet/generate()
|
||||
var/obj/item/pet_carrier/carrier = new carrier_type()
|
||||
|
||||
@@ -142,7 +142,7 @@
|
||||
/datum/reagent/blood = 30,
|
||||
/datum/reagent/teslium = 1 //To shock the whole thing into life
|
||||
)
|
||||
result = /mob/living/simple_animal/pet/dog/breaddog
|
||||
result = /mob/living/basic/pet/dog/breaddog
|
||||
subcategory = CAT_BREAD
|
||||
|
||||
////////////////////////////////////////////////TOAST////////////////////////////////////////////////
|
||||
|
||||
@@ -758,7 +758,7 @@
|
||||
for(var/obj/machinery/computer/security/telescreen/entertainment/Monitor in GLOB.machines)
|
||||
Monitor.icon_state_on = "entertainment_xmas"
|
||||
|
||||
for(var/mob/living/simple_animal/pet/dog/corgi/ian/Ian in GLOB.mob_living_list)
|
||||
for(var/mob/living/basic/pet/dog/corgi/ian/Ian in GLOB.mob_living_list)
|
||||
Ian.place_on_head(new /obj/item/clothing/head/helmet/space/santahat(Ian))
|
||||
|
||||
|
||||
|
||||
@@ -88,9 +88,9 @@
|
||||
/mob/living/basic/rabbit,
|
||||
)
|
||||
mobtype += pick(
|
||||
/mob/living/simple_animal/pet/dog/corgi,
|
||||
/mob/living/simple_animal/pet/dog/corgi/puppy,
|
||||
/mob/living/simple_animal/pet/dog/pug,
|
||||
/mob/living/basic/pet/dog/corgi,
|
||||
/mob/living/basic/pet/dog/corgi/puppy,
|
||||
/mob/living/basic/pet/dog/pug,
|
||||
)
|
||||
mobtype += pick(
|
||||
/mob/living/simple_animal/pet/cat,
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
/datum/job/head_of_personnel/get_mail_goodies(mob/recipient)
|
||||
. = ..()
|
||||
// Strange Reagent if the pet is dead.
|
||||
for(var/mob/living/simple_animal/pet/dog/corgi/ian/staff_pet in GLOB.dead_mob_list)
|
||||
for(var/mob/living/basic/pet/dog/corgi/ian/staff_pet in GLOB.dead_mob_list)
|
||||
. += list(/datum/reagent/medicine/strange_reagent = 20)
|
||||
break
|
||||
|
||||
|
||||
+170
-142
@@ -1,6 +1,6 @@
|
||||
//Dogs.
|
||||
|
||||
/mob/living/simple_animal/pet/dog
|
||||
/mob/living/basic/pet/dog
|
||||
mob_biotypes = MOB_ORGANIC|MOB_BEAST
|
||||
response_help_continuous = "pets"
|
||||
response_help_simple = "pet"
|
||||
@@ -8,33 +8,30 @@
|
||||
response_disarm_simple = "bop"
|
||||
response_harm_continuous = "kicks"
|
||||
response_harm_simple = "kick"
|
||||
speak = list("YAP", "Woof!", "Bark!", "AUUUUUU")
|
||||
speak_emote = list("barks", "woofs")
|
||||
emote_hear = list("barks!", "woofs!", "yaps.","pants.")
|
||||
emote_see = list("shakes their head.", "chases their tail.","shivers.")
|
||||
faction = list("neutral")
|
||||
see_in_dark = 5
|
||||
speak_chance = 1
|
||||
turns_per_move = 10
|
||||
can_be_held = TRUE
|
||||
ai_controller = /datum/ai_controller/dog
|
||||
stop_automated_movement = TRUE
|
||||
///In the case 'melee_damage_upper' is somehow raised above 0
|
||||
attack_verb_continuous = "bites"
|
||||
attack_verb_simple = "bite"
|
||||
attack_sound = 'sound/weapons/bite.ogg'
|
||||
attack_vis_effect = ATTACK_EFFECT_BITE
|
||||
|
||||
footstep_type = FOOTSTEP_MOB_CLAW
|
||||
|
||||
/mob/living/simple_animal/pet/dog/Initialize(mapload)
|
||||
/mob/living/basic/pet/dog/Initialize(mapload)
|
||||
. = ..()
|
||||
AddElement(/datum/element/pet_bonus, "woofs happily!")
|
||||
add_cell_sample()
|
||||
AddElement(/datum/element/footstep, FOOTSTEP_MOB_CLAW)
|
||||
|
||||
/mob/living/basic/pet/dog/proc/update_dog_speech(datum/ai_planning_subtree/random_speech/speech)
|
||||
speech.speak = string_list(list("YAP", "Woof!", "Bark!", "AUUUUUU"))
|
||||
speech.emote_hear = string_list(list("barks!", "woofs!", "yaps.","pants."))
|
||||
speech.emote_see = string_list(list("shakes [p_their()] head.", "chases [p_their()] tail.","shivers."))
|
||||
|
||||
//Corgis and pugs are now under one dog subtype
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi
|
||||
/mob/living/basic/pet/dog/corgi
|
||||
name = "\improper corgi"
|
||||
real_name = "corgi"
|
||||
desc = "They're a corgi."
|
||||
@@ -43,35 +40,39 @@
|
||||
icon_dead = "corgi_dead"
|
||||
held_state = "corgi"
|
||||
butcher_results = list(/obj/item/food/meat/slab/corgi = 3, /obj/item/stack/sheet/animalhide/corgi = 1)
|
||||
childtype = list(/mob/living/simple_animal/pet/dog/corgi/puppy = 95, /mob/living/simple_animal/pet/dog/corgi/puppy/void = 5)
|
||||
animal_species = /mob/living/simple_animal/pet/dog
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
collar_type = "corgi"
|
||||
collar_icon_state = "corgi"
|
||||
ai_controller = /datum/ai_controller/dog/corgi
|
||||
var/obj/item/inventory_head
|
||||
var/obj/item/inventory_back
|
||||
/// Access card for Ian.
|
||||
var/obj/item/card/id/access_card = null
|
||||
var/shaved = FALSE
|
||||
var/nofur = FALSE //Corgis that have risen past the material plane of existence.
|
||||
/// Is this corgi physically slow due to age, etc?
|
||||
var/is_slow = FALSE
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/add_cell_sample()
|
||||
AddElement(/datum/element/swabable, CELL_LINE_TABLE_CORGI, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5)
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/Destroy()
|
||||
/mob/living/basic/pet/dog/corgi/Destroy()
|
||||
QDEL_NULL(inventory_head)
|
||||
QDEL_NULL(inventory_back)
|
||||
QDEL_NULL(access_card)
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/gib()
|
||||
/mob/living/basic/pet/dog/corgi/gib()
|
||||
if(inventory_head)
|
||||
inventory_head.forceMove(drop_location())
|
||||
inventory_head = null
|
||||
if(inventory_back)
|
||||
inventory_back.forceMove(drop_location())
|
||||
inventory_back = null
|
||||
if(access_card)
|
||||
access_card.forceMove(drop_location())
|
||||
access_card = null
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/deadchat_plays(mode = ANARCHY_MODE, cooldown = 12 SECONDS)
|
||||
/mob/living/basic/pet/dog/corgi/deadchat_plays(mode = ANARCHY_MODE, cooldown = 12 SECONDS)
|
||||
. = AddComponent(/datum/component/deadchat_control/cardinal_movement, mode, list(
|
||||
"speak" = CALLBACK(src, PROC_REF(handle_automated_speech), TRUE),
|
||||
"speak" = CALLBACK(src, PROC_REF(bork)),
|
||||
"wear_hat" = CALLBACK(src, PROC_REF(find_new_hat)),
|
||||
"drop_hat" = CALLBACK(src, PROC_REF(drop_hat)),
|
||||
"spin" = CALLBACK(src, TYPE_PROC_REF(/mob, emote), "spin")), cooldown, CALLBACK(src, PROC_REF(stop_deadchat_plays)))
|
||||
@@ -79,10 +80,17 @@
|
||||
if(. == COMPONENT_INCOMPATIBLE)
|
||||
return
|
||||
|
||||
stop_automated_movement = TRUE
|
||||
// Stop all automated behavior.
|
||||
QDEL_NULL(ai_controller)
|
||||
|
||||
///Deadchat bark.
|
||||
/mob/living/basic/pet/dog/corgi/proc/bork()
|
||||
var/emote = pick("barks!", "woofs!", "yaps.","pants.")
|
||||
|
||||
manual_emote(emote)
|
||||
|
||||
///Deadchat plays command that picks a new hat for Ian.
|
||||
/mob/living/simple_animal/pet/dog/corgi/proc/find_new_hat()
|
||||
/mob/living/basic/pet/dog/corgi/proc/find_new_hat()
|
||||
if(!isturf(loc))
|
||||
return
|
||||
var/list/possible_headwear = list()
|
||||
@@ -102,7 +110,7 @@
|
||||
visible_message(span_notice("[src] puts [inventory_head] on [p_their()] own head, somehow."))
|
||||
|
||||
///Deadchat plays command that drops the current hat off Ian.
|
||||
/mob/living/simple_animal/pet/dog/corgi/proc/drop_hat()
|
||||
/mob/living/basic/pet/dog/corgi/proc/drop_hat()
|
||||
if(!inventory_head)
|
||||
return
|
||||
visible_message(span_notice("[src] vigorously shakes [p_their()] head, dropping [inventory_head] to the ground."))
|
||||
@@ -111,7 +119,13 @@
|
||||
update_corgi_fluff()
|
||||
regenerate_icons()
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/handle_atom_del(atom/A)
|
||||
///Turn AI back on.
|
||||
/mob/living/basic/pet/dog/corgi/proc/stop_deadchat_plays()
|
||||
var/controller_type = initial(ai_controller)
|
||||
ai_controller = new controller_type(src)
|
||||
ai_controller?.blackboard[BB_DOG_IS_SLOW] = is_slow
|
||||
|
||||
/mob/living/basic/pet/dog/corgi/handle_atom_del(atom/A)
|
||||
if(A == inventory_head)
|
||||
inventory_head = null
|
||||
update_corgi_fluff()
|
||||
@@ -122,7 +136,7 @@
|
||||
regenerate_icons()
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/pet/dog/pug
|
||||
/mob/living/basic/pet/dog/pug
|
||||
name = "\improper pug"
|
||||
real_name = "pug"
|
||||
desc = "They're a pug."
|
||||
@@ -132,19 +146,21 @@
|
||||
icon_dead = "pug_dead"
|
||||
butcher_results = list(/obj/item/food/meat/slab/pug = 3)
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
collar_type = "pug"
|
||||
collar_icon_state = "pug"
|
||||
held_state = "pug"
|
||||
|
||||
/mob/living/simple_animal/pet/dog/pug/add_cell_sample()
|
||||
/mob/living/basic/pet/dog/pug/Initialize(mapload)
|
||||
. = ..()
|
||||
|
||||
AddElement(/datum/element/swabable, CELL_LINE_TABLE_PUG, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5)
|
||||
|
||||
/mob/living/simple_animal/pet/dog/pug/mcgriff
|
||||
/mob/living/basic/pet/dog/pug/mcgriff
|
||||
name = "McGriff"
|
||||
desc = "This dog can tell something smells around here, and that something is CRIME!"
|
||||
gold_core_spawnable = NO_SPAWN
|
||||
unique_pet = TRUE
|
||||
|
||||
/mob/living/simple_animal/pet/dog/bullterrier
|
||||
/mob/living/basic/pet/dog/bullterrier
|
||||
name = "\improper bull terrier"
|
||||
real_name = "bull terrier"
|
||||
desc = "They're a bull terrier."
|
||||
@@ -154,44 +170,53 @@
|
||||
icon_dead = "bullterrier_dead"
|
||||
butcher_results = list(/obj/item/food/meat/slab/corgi = 3) // Would feel redundant to add more new dog meats.
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
collar_type = "bullterrier"
|
||||
collar_icon_state = "bullterrier"
|
||||
held_state = "bullterrier"
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/exoticcorgi
|
||||
/mob/living/basic/pet/dog/corgi/exoticcorgi
|
||||
name = "Exotic Corgi"
|
||||
desc = "As cute as they are colorful!"
|
||||
icon = 'icons/mob/simple/pets.dmi'
|
||||
icon_state = "corgigrey"
|
||||
icon_living = "corgigrey"
|
||||
icon_dead = "corgigrey_dead"
|
||||
animal_species = /mob/living/simple_animal/pet/dog/corgi/exoticcorgi
|
||||
nofur = TRUE
|
||||
|
||||
/mob/living/simple_animal/pet/dog/Initialize(mapload)
|
||||
/mob/living/basic/pet/dog/Initialize(mapload)
|
||||
. = ..()
|
||||
var/dog_area = get_area(src)
|
||||
for(var/obj/structure/bed/dogbed/D in dog_area)
|
||||
if(D.update_owner(src)) //No muscling in on my turf you fucking parrot
|
||||
break
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/Initialize(mapload)
|
||||
/mob/living/basic/pet/dog/corgi/Initialize(mapload)
|
||||
. = ..()
|
||||
regenerate_icons()
|
||||
AddElement(/datum/element/strippable, GLOB.strippable_corgi_items)
|
||||
AddElement(/datum/element/swabable, CELL_LINE_TABLE_CORGI, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5)
|
||||
RegisterSignal(src, COMSIG_MOB_TRIED_ACCESS, PROC_REF(on_tried_access))
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/exoticcorgi/Initialize(mapload)
|
||||
/**
|
||||
* Handler for COMSIG_MOB_TRIED_ACCESS
|
||||
*/
|
||||
/mob/living/basic/pet/dog/corgi/proc/on_tried_access(mob/accessor, obj/locked_thing)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
return locked_thing?.check_access(access_card) ? ACCESS_ALLOWED : ACCESS_DISALLOWED
|
||||
|
||||
/mob/living/basic/pet/dog/corgi/exoticcorgi/Initialize(mapload)
|
||||
. = ..()
|
||||
var/newcolor = rgb(rand(0, 255), rand(0, 255), rand(0, 255))
|
||||
add_atom_colour(newcolor, FIXED_COLOUR_PRIORITY)
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/death(gibbed)
|
||||
/mob/living/basic/pet/dog/corgi/death(gibbed)
|
||||
..(gibbed)
|
||||
regenerate_icons()
|
||||
|
||||
GLOBAL_LIST_INIT(strippable_corgi_items, create_strippable_list(list(
|
||||
/datum/strippable_item/corgi_head,
|
||||
/datum/strippable_item/corgi_back,
|
||||
/datum/strippable_item/corgi_collar,
|
||||
/datum/strippable_item/pet_collar,
|
||||
/datum/strippable_item/corgi_id,
|
||||
)))
|
||||
|
||||
@@ -199,21 +224,21 @@ GLOBAL_LIST_INIT(strippable_corgi_items, create_strippable_list(list(
|
||||
key = STRIPPABLE_ITEM_HEAD
|
||||
|
||||
/datum/strippable_item/corgi_head/get_item(atom/source)
|
||||
var/mob/living/simple_animal/pet/dog/corgi/corgi_source = source
|
||||
var/mob/living/basic/pet/dog/corgi/corgi_source = source
|
||||
if (!istype(corgi_source))
|
||||
return
|
||||
|
||||
return corgi_source.inventory_head
|
||||
|
||||
/datum/strippable_item/corgi_head/finish_equip(atom/source, obj/item/equipping, mob/user)
|
||||
var/mob/living/simple_animal/pet/dog/corgi/corgi_source = source
|
||||
var/mob/living/basic/pet/dog/corgi/corgi_source = source
|
||||
if (!istype(corgi_source))
|
||||
return
|
||||
|
||||
corgi_source.place_on_head(equipping, user)
|
||||
|
||||
/datum/strippable_item/corgi_head/finish_unequip(atom/source, mob/user)
|
||||
var/mob/living/simple_animal/pet/dog/corgi/corgi_source = source
|
||||
var/mob/living/basic/pet/dog/corgi/corgi_source = source
|
||||
if (!istype(corgi_source))
|
||||
return
|
||||
|
||||
@@ -222,11 +247,47 @@ GLOBAL_LIST_INIT(strippable_corgi_items, create_strippable_list(list(
|
||||
corgi_source.update_corgi_fluff()
|
||||
corgi_source.regenerate_icons()
|
||||
|
||||
/datum/strippable_item/pet_collar
|
||||
key = STRIPPABLE_ITEM_PET_COLLAR
|
||||
|
||||
/datum/strippable_item/pet_collar/get_item(atom/source)
|
||||
var/mob/living/basic/pet/pet_source = source
|
||||
if (!istype(pet_source))
|
||||
return
|
||||
|
||||
return pet_source.collar
|
||||
|
||||
/datum/strippable_item/pet_collar/try_equip(atom/source, obj/item/equipping, mob/user)
|
||||
. = ..()
|
||||
if (!.)
|
||||
return FALSE
|
||||
|
||||
if (!istype(equipping, /obj/item/clothing/neck/petcollar))
|
||||
to_chat(user, span_warning("That's not a collar."))
|
||||
return FALSE
|
||||
|
||||
return TRUE
|
||||
|
||||
/datum/strippable_item/pet_collar/finish_equip(atom/source, obj/item/equipping, mob/user)
|
||||
var/mob/living/basic/pet/pet_source = source
|
||||
if (!istype(pet_source))
|
||||
return
|
||||
|
||||
pet_source.add_collar(equipping, user)
|
||||
|
||||
/datum/strippable_item/pet_collar/finish_unequip(atom/source, mob/user)
|
||||
var/mob/living/basic/pet/pet_source = source
|
||||
if (!istype(pet_source))
|
||||
return
|
||||
|
||||
var/obj/collar = pet_source.remove_collar(user.drop_location())
|
||||
user.put_in_hands(collar)
|
||||
|
||||
/datum/strippable_item/corgi_back
|
||||
key = STRIPPABLE_ITEM_BACK
|
||||
|
||||
/datum/strippable_item/corgi_back/get_item(atom/source)
|
||||
var/mob/living/simple_animal/pet/dog/corgi/corgi_source = source
|
||||
var/mob/living/basic/pet/dog/corgi/corgi_source = source
|
||||
if (!istype(corgi_source))
|
||||
return
|
||||
|
||||
@@ -249,7 +310,7 @@ GLOBAL_LIST_INIT(strippable_corgi_items, create_strippable_list(list(
|
||||
return TRUE
|
||||
|
||||
/datum/strippable_item/corgi_back/finish_equip(atom/source, obj/item/equipping, mob/user)
|
||||
var/mob/living/simple_animal/pet/dog/corgi/corgi_source = source
|
||||
var/mob/living/basic/pet/dog/corgi/corgi_source = source
|
||||
if (!istype(corgi_source))
|
||||
return
|
||||
|
||||
@@ -259,7 +320,7 @@ GLOBAL_LIST_INIT(strippable_corgi_items, create_strippable_list(list(
|
||||
corgi_source.regenerate_icons()
|
||||
|
||||
/datum/strippable_item/corgi_back/finish_unequip(atom/source, mob/user)
|
||||
var/mob/living/simple_animal/pet/dog/corgi/corgi_source = source
|
||||
var/mob/living/basic/pet/dog/corgi/corgi_source = source
|
||||
if (!istype(corgi_source))
|
||||
return
|
||||
|
||||
@@ -268,50 +329,11 @@ GLOBAL_LIST_INIT(strippable_corgi_items, create_strippable_list(list(
|
||||
corgi_source.update_corgi_fluff()
|
||||
corgi_source.regenerate_icons()
|
||||
|
||||
/datum/strippable_item/corgi_collar
|
||||
key = STRIPPABLE_ITEM_CORGI_COLLAR
|
||||
|
||||
/datum/strippable_item/corgi_collar/get_item(atom/source)
|
||||
var/mob/living/simple_animal/pet/dog/corgi/corgi_source = source
|
||||
if (!istype(corgi_source))
|
||||
return
|
||||
|
||||
return corgi_source.pcollar
|
||||
|
||||
/datum/strippable_item/corgi_collar/try_equip(atom/source, obj/item/equipping, mob/user)
|
||||
. = ..()
|
||||
if (!.)
|
||||
return FALSE
|
||||
|
||||
if (!istype(equipping, /obj/item/clothing/neck/petcollar))
|
||||
to_chat(user, span_warning("That's not a collar."))
|
||||
return FALSE
|
||||
|
||||
return TRUE
|
||||
|
||||
/datum/strippable_item/corgi_collar/finish_equip(atom/source, obj/item/equipping, mob/user)
|
||||
var/mob/living/simple_animal/pet/dog/corgi/corgi_source = source
|
||||
if (!istype(corgi_source))
|
||||
return
|
||||
|
||||
corgi_source.add_collar(equipping, user)
|
||||
corgi_source.update_corgi_fluff()
|
||||
|
||||
/datum/strippable_item/corgi_collar/finish_unequip(atom/source, mob/user)
|
||||
var/mob/living/simple_animal/pet/dog/corgi/corgi_source = source
|
||||
if (!istype(corgi_source))
|
||||
return
|
||||
|
||||
user.put_in_hands(corgi_source.pcollar)
|
||||
corgi_source.pcollar = null
|
||||
corgi_source.update_corgi_fluff()
|
||||
corgi_source.regenerate_icons()
|
||||
|
||||
/datum/strippable_item/corgi_id
|
||||
key = STRIPPABLE_ITEM_ID
|
||||
|
||||
/datum/strippable_item/corgi_id/get_item(atom/source)
|
||||
var/mob/living/simple_animal/pet/dog/corgi/corgi_source = source
|
||||
var/mob/living/basic/pet/dog/corgi/corgi_source = source
|
||||
if (!istype(corgi_source))
|
||||
return
|
||||
|
||||
@@ -329,7 +351,7 @@ GLOBAL_LIST_INIT(strippable_corgi_items, create_strippable_list(list(
|
||||
return TRUE
|
||||
|
||||
/datum/strippable_item/corgi_id/finish_equip(atom/source, obj/item/equipping, mob/user)
|
||||
var/mob/living/simple_animal/pet/dog/corgi/corgi_source = source
|
||||
var/mob/living/basic/pet/dog/corgi/corgi_source = source
|
||||
if (!istype(corgi_source))
|
||||
return
|
||||
|
||||
@@ -337,7 +359,7 @@ GLOBAL_LIST_INIT(strippable_corgi_items, create_strippable_list(list(
|
||||
corgi_source.access_card = equipping
|
||||
|
||||
/datum/strippable_item/corgi_id/finish_unequip(atom/source, mob/user)
|
||||
var/mob/living/simple_animal/pet/dog/corgi/corgi_source = source
|
||||
var/mob/living/basic/pet/dog/corgi/corgi_source = source
|
||||
if (!istype(corgi_source))
|
||||
return
|
||||
|
||||
@@ -346,7 +368,7 @@ GLOBAL_LIST_INIT(strippable_corgi_items, create_strippable_list(list(
|
||||
corgi_source.update_corgi_fluff()
|
||||
corgi_source.regenerate_icons()
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/getarmor(def_zone, type)
|
||||
/mob/living/basic/pet/dog/corgi/getarmor(def_zone, type)
|
||||
var/armorval = 0
|
||||
|
||||
if(def_zone)
|
||||
@@ -364,7 +386,7 @@ GLOBAL_LIST_INIT(strippable_corgi_items, create_strippable_list(list(
|
||||
armorval += inventory_back.armor.getRating(type)
|
||||
return armorval*0.5
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/attackby(obj/item/O, mob/user, params)
|
||||
/mob/living/basic/pet/dog/corgi/attackby(obj/item/O, mob/user, params)
|
||||
if (istype(O, /obj/item/razor))
|
||||
if (shaved)
|
||||
to_chat(user, span_warning("You can't shave this corgi, [p_they()] has already been shaved!"))
|
||||
@@ -392,7 +414,7 @@ GLOBAL_LIST_INIT(strippable_corgi_items, create_strippable_list(list(
|
||||
//Many hats added, Some will probably be removed, just want to see which ones are popular.
|
||||
// > some will probably be removed
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/proc/place_on_head(obj/item/item_to_add, mob/living/user)
|
||||
/mob/living/basic/pet/dog/corgi/proc/place_on_head(obj/item/item_to_add, mob/living/user)
|
||||
if(inventory_head)
|
||||
if(user)
|
||||
to_chat(user, span_warning("You can't put more than one hat on [src]!"))
|
||||
@@ -434,15 +456,12 @@ GLOBAL_LIST_INIT(strippable_corgi_items, create_strippable_list(list(
|
||||
|
||||
return valid
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/proc/update_corgi_fluff()
|
||||
/mob/living/basic/pet/dog/corgi/proc/update_corgi_fluff()
|
||||
// First, change back to defaults
|
||||
name = real_name
|
||||
desc = initial(desc)
|
||||
// BYOND/DM doesn't support the use of initial on lists.
|
||||
speak = list("YAP", "Woof!", "Bark!", "AUUUUUU")
|
||||
speak_emote = list("barks", "woofs")
|
||||
emote_hear = list("barks!", "woofs!", "yaps.","pants.")
|
||||
emote_see = list("shakes [p_their()] head.", "chases [p_their()] tail.","shivers.")
|
||||
desc = initial(desc)
|
||||
set_light(0)
|
||||
|
||||
@@ -454,13 +473,23 @@ GLOBAL_LIST_INIT(strippable_corgi_items, create_strippable_list(list(
|
||||
var/datum/dog_fashion/DF = new inventory_back.dog_fashion(src)
|
||||
DF.apply(src)
|
||||
|
||||
/mob/living/basic/pet/dog/corgi/update_dog_speech(datum/ai_planning_subtree/random_speech/speech)
|
||||
..()
|
||||
|
||||
if(inventory_head?.dog_fashion)
|
||||
var/datum/dog_fashion/DF = new inventory_head.dog_fashion(src)
|
||||
DF.apply_to_speech(speech)
|
||||
|
||||
if(inventory_back?.dog_fashion)
|
||||
var/datum/dog_fashion/DF = new inventory_back.dog_fashion(src)
|
||||
DF.apply_to_speech(speech)
|
||||
|
||||
//IAN! SQUEEEEEEEEE~
|
||||
/mob/living/simple_animal/pet/dog/corgi/ian
|
||||
/mob/living/basic/pet/dog/corgi/ian
|
||||
name = "Ian"
|
||||
real_name = "Ian" //Intended to hold the name without altering it.
|
||||
gender = MALE
|
||||
desc = "He's the HoP's beloved corgi."
|
||||
icon = 'modular_skyrat/modules/chadian/icons/ian.dmi' //SKYRAT EDIT CHANGE
|
||||
response_help_continuous = "pets"
|
||||
response_help_simple = "pet"
|
||||
response_disarm_continuous = "bops"
|
||||
@@ -474,7 +503,7 @@ GLOBAL_LIST_INIT(strippable_corgi_items, create_strippable_list(list(
|
||||
var/memory_saved = FALSE
|
||||
var/saved_head //path
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/ian/Initialize(mapload)
|
||||
/mob/living/basic/pet/dog/corgi/ian/Initialize(mapload)
|
||||
. = ..()
|
||||
//parent call must happen first to ensure IAN
|
||||
//is not in nullspace when child puppies spawn
|
||||
@@ -482,7 +511,7 @@ GLOBAL_LIST_INIT(strippable_corgi_items, create_strippable_list(list(
|
||||
if(age == 0)
|
||||
var/turf/target = get_turf(loc)
|
||||
if(target)
|
||||
new /mob/living/simple_animal/pet/dog/corgi/puppy/ian(target)
|
||||
new /mob/living/basic/pet/dog/corgi/puppy/ian(target)
|
||||
Write_Memory(FALSE)
|
||||
return INITIALIZE_HINT_QDEL
|
||||
else if(age == record_age)
|
||||
@@ -491,24 +520,21 @@ GLOBAL_LIST_INIT(strippable_corgi_items, create_strippable_list(list(
|
||||
held_state = "old_corgi"
|
||||
icon_dead = "old_corgi_dead"
|
||||
desc = "At a ripe old age of [record_age], Ian's not as spry as he used to be, but he'll always be the HoP's beloved corgi." //RIP
|
||||
turns_per_move = 20
|
||||
ai_controller?.blackboard[BB_DOG_IS_SLOW] = TRUE
|
||||
is_slow = TRUE
|
||||
|
||||
old = TRUE //SKYRAT EDIT ADDITION
|
||||
|
||||
/* SKYRAT EDIT REMOVAL
|
||||
/mob/living/simple_animal/pet/dog/corgi/ian/Life(delta_time = SSMOBS_DT, times_fired)
|
||||
/mob/living/basic/pet/dog/corgi/ian/Life(delta_time = SSMOBS_DT, times_fired)
|
||||
if(!stat && SSticker.current_state == GAME_STATE_FINISHED && !memory_saved)
|
||||
Write_Memory(FALSE)
|
||||
memory_saved = TRUE
|
||||
..()
|
||||
*/
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/ian/death()
|
||||
/mob/living/basic/pet/dog/corgi/ian/death()
|
||||
if(!memory_saved)
|
||||
Write_Memory(TRUE)
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/ian/proc/Read_Memory()
|
||||
/mob/living/basic/pet/dog/corgi/ian/proc/Read_Memory()
|
||||
if(fexists("data/npc_saves/Ian.sav")) //legacy compatability to convert old format to new
|
||||
var/savefile/S = new /savefile("data/npc_saves/Ian.sav")
|
||||
S["age"] >> age
|
||||
@@ -530,7 +556,7 @@ GLOBAL_LIST_INIT(strippable_corgi_items, create_strippable_list(list(
|
||||
if(saved_head)
|
||||
place_on_head(new saved_head)
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/ian/Write_Memory(dead, gibbed)
|
||||
/mob/living/basic/pet/dog/corgi/ian/Write_Memory(dead, gibbed)
|
||||
. = ..()
|
||||
if(!.)
|
||||
return
|
||||
@@ -553,14 +579,14 @@ GLOBAL_LIST_INIT(strippable_corgi_items, create_strippable_list(list(
|
||||
fdel(json_file)
|
||||
WRITE_FILE(json_file, json_encode(file_data))
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/ian/narsie_act()
|
||||
/mob/living/basic/pet/dog/corgi/ian/narsie_act()
|
||||
playsound(src, 'sound/magic/demon_dies.ogg', 75, TRUE)
|
||||
var/mob/living/simple_animal/pet/dog/corgi/narsie/N = new(loc)
|
||||
var/mob/living/basic/pet/dog/corgi/narsie/N = new(loc)
|
||||
N.setDir(dir)
|
||||
investigate_log("has been gibbed by Nar'Sie.", INVESTIGATE_DEATHS)
|
||||
gib()
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/narsie
|
||||
/mob/living/basic/pet/dog/corgi/narsie
|
||||
name = "Nars-Ian"
|
||||
desc = "Ia! Ia!"
|
||||
icon_state = "narsian"
|
||||
@@ -572,10 +598,17 @@ GLOBAL_LIST_INIT(strippable_corgi_items, create_strippable_list(list(
|
||||
unique_pet = TRUE
|
||||
held_state = "narsian"
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/narsie/Life(delta_time = SSMOBS_DT, times_fired)
|
||||
/mob/living/basic/pet/dog/corgi/narsie/Life(delta_time = SSMOBS_DT, times_fired)
|
||||
..()
|
||||
for(var/mob/living/simple_animal/pet/P in range(1, src))
|
||||
if(P != src && !istype(P,/mob/living/simple_animal/pet/dog/corgi/narsie))
|
||||
if(P != src && !istype(P,/mob/living/basic/pet/dog/corgi/narsie))
|
||||
visible_message(span_warning("[src] devours [P]!"), \
|
||||
"<span class='cult big bold'>DELICIOUS SOULS</span>")
|
||||
playsound(src, 'sound/magic/demon_attack1.ogg', 75, TRUE)
|
||||
narsie_act()
|
||||
P.gib()
|
||||
for(var/mob/living/basic/pet/P in range(1, src))
|
||||
if(P != src && !istype(P,/mob/living/basic/pet/dog/corgi/narsie))
|
||||
visible_message(span_warning("[src] devours [P]!"), \
|
||||
"<span class='cult big bold'>DELICIOUS SOULS</span>")
|
||||
playsound(src, 'sound/magic/demon_attack1.ogg', 75, TRUE)
|
||||
@@ -583,18 +616,20 @@ GLOBAL_LIST_INIT(strippable_corgi_items, create_strippable_list(list(
|
||||
P.investigate_log("has been gibbed by [src].", INVESTIGATE_DEATHS)
|
||||
P.gib()
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/narsie/update_corgi_fluff()
|
||||
/mob/living/basic/pet/dog/corgi/narsie/update_corgi_fluff()
|
||||
..()
|
||||
speak = list("Tari'karat-pasnar!", "IA! IA!", "BRRUUURGHGHRHR")
|
||||
speak_emote = list("growls", "barks ominously")
|
||||
emote_hear = list("barks echoingly!", "woofs hauntingly!", "yaps in an eldritch manner.", "mutters something unspeakable.")
|
||||
emote_see = list("communes with the unnameable.", "ponders devouring some souls.", "shakes.")
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/narsie/narsie_act()
|
||||
/mob/living/basic/pet/dog/corgi/narsie/update_dog_speech(datum/ai_planning_subtree/random_speech/speech)
|
||||
speech.speak = string_list(list("Tari'karat-pasnar!", "IA! IA!", "BRRUUURGHGHRHR"))
|
||||
speech.emote_hear = string_list(list("barks echoingly!", "woofs hauntingly!", "yaps in an eldritch manner.", "mutters something unspeakable."))
|
||||
speech.emote_see = string_list(list("communes with the unnameable.", "ponders devouring some souls.", "shakes."))
|
||||
|
||||
/mob/living/basic/pet/dog/corgi/narsie/narsie_act()
|
||||
adjustBruteLoss(-maxHealth)
|
||||
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/regenerate_icons()
|
||||
/mob/living/basic/pet/dog/corgi/regenerate_icons()
|
||||
..()
|
||||
if(inventory_head)
|
||||
var/image/head_icon
|
||||
@@ -639,7 +674,7 @@ GLOBAL_LIST_INIT(strippable_corgi_items, create_strippable_list(list(
|
||||
|
||||
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/puppy
|
||||
/mob/living/basic/pet/dog/corgi/puppy
|
||||
name = "\improper corgi puppy"
|
||||
real_name = "corgi"
|
||||
desc = "They're a corgi puppy!"
|
||||
@@ -649,24 +684,24 @@ GLOBAL_LIST_INIT(strippable_corgi_items, create_strippable_list(list(
|
||||
density = FALSE
|
||||
pass_flags = PASSMOB
|
||||
mob_size = MOB_SIZE_SMALL
|
||||
collar_type = "puppy"
|
||||
collar_icon_state = "puppy"
|
||||
|
||||
//puppies cannot wear anything.
|
||||
/mob/living/simple_animal/pet/dog/corgi/puppy/Topic(href, href_list)
|
||||
/mob/living/basic/pet/dog/corgi/puppy/Topic(href, href_list)
|
||||
if(href_list["remove_inv"] || href_list["add_inv"])
|
||||
to_chat(usr, span_warning("You can't fit this on [src], [p_they()] [p_are()] too small!"))
|
||||
return
|
||||
..()
|
||||
|
||||
//PUPPY IAN! SQUEEEEEEEEE~
|
||||
/mob/living/simple_animal/pet/dog/corgi/puppy/ian
|
||||
/mob/living/basic/pet/dog/corgi/puppy/ian
|
||||
name = "Ian"
|
||||
real_name = "Ian"
|
||||
gender = MALE
|
||||
desc = "He's the HoP's beloved corgi puppy."
|
||||
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/puppy/void //Tribute to the corgis born in nullspace
|
||||
/mob/living/basic/pet/dog/corgi/puppy/void //Tribute to the corgis born in nullspace
|
||||
name = "\improper void puppy"
|
||||
real_name = "voidy"
|
||||
desc = "A corgi puppy that has been infused with deep space energy. It's staring back..."
|
||||
@@ -675,20 +710,20 @@ GLOBAL_LIST_INIT(strippable_corgi_items, create_strippable_list(list(
|
||||
icon_living = "void_puppy"
|
||||
icon_dead = "void_puppy_dead"
|
||||
nofur = TRUE
|
||||
unsuitable_atmos_damage = 0
|
||||
minbodytemp = TCMB
|
||||
maxbodytemp = T0C + 40
|
||||
held_state = "void_puppy"
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/puppy/void/Initialize(mapload)
|
||||
/mob/living/basic/pet/dog/corgi/puppy/void/Initialize(mapload)
|
||||
. = ..()
|
||||
ADD_TRAIT(src, TRAIT_AI_BAGATTACK, INNATE_TRAIT)
|
||||
RemoveElement(/datum/element/atmos_requirements)
|
||||
RemoveElement(/datum/element/basic_body_temp_sensitive)
|
||||
AddElement(/datum/element/basic_body_temp_sensitive, TCMB, T0C + 40)
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/puppy/void/Process_Spacemove(movement_dir = 0, continuous_move = FALSE)
|
||||
/mob/living/basic/pet/dog/corgi/puppy/void/Process_Spacemove(movement_dir = 0, continuous_move = FALSE)
|
||||
return 1 //Void puppies can navigate space.
|
||||
|
||||
//LISA! SQUEEEEEEEEE~
|
||||
/mob/living/simple_animal/pet/dog/corgi/lisa
|
||||
/mob/living/basic/pet/dog/corgi/lisa
|
||||
name = "Lisa"
|
||||
real_name = "Lisa"
|
||||
gender = FEMALE
|
||||
@@ -708,17 +743,13 @@ GLOBAL_LIST_INIT(strippable_corgi_items, create_strippable_list(list(
|
||||
var/puppies = 0
|
||||
|
||||
//Lisa already has a cute bow!
|
||||
/mob/living/simple_animal/pet/dog/corgi/lisa/Topic(href, href_list)
|
||||
/mob/living/basic/pet/dog/corgi/lisa/Topic(href, href_list)
|
||||
if(href_list["remove_inv"] || href_list["add_inv"])
|
||||
to_chat(usr, span_warning("[src] already has a cute bow!"))
|
||||
return
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/lisa/Life(delta_time = SSMOBS_DT, times_fired)
|
||||
. = ..()
|
||||
make_babies()
|
||||
|
||||
/mob/living/simple_animal/pet/dog/breaddog //Most of the code originates from Cak
|
||||
/mob/living/basic/pet/dog/breaddog //Most of the code originates from Cak
|
||||
name = "Kobun"
|
||||
desc = "It is a dog made out of bread. 'The universe is definitely half full'."
|
||||
icon_state = "breaddog"
|
||||
@@ -728,7 +759,7 @@ GLOBAL_LIST_INIT(strippable_corgi_items, create_strippable_list(list(
|
||||
health = 50
|
||||
maxHealth = 50
|
||||
gender = NEUTER
|
||||
harm_intent_damage = 10
|
||||
damage_coeff = list(BRUTE = 3, BURN = 3, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1)
|
||||
butcher_results = list(/obj/item/organ/internal/brain = 1, /obj/item/organ/internal/heart = 1, /obj/item/food/breadslice = 3, \
|
||||
/obj/item/food/meat/slab = 2)
|
||||
response_harm_continuous = "takes a bite out of"
|
||||
@@ -737,10 +768,7 @@ GLOBAL_LIST_INIT(strippable_corgi_items, create_strippable_list(list(
|
||||
held_state = "breaddog"
|
||||
worn_slot_flags = ITEM_SLOT_HEAD
|
||||
|
||||
/mob/living/simple_animal/pet/dog/breaddog/add_cell_sample()
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/pet/dog/breaddog/CheckParts(list/parts)
|
||||
/mob/living/basic/pet/dog/breaddog/CheckParts(list/parts)
|
||||
..()
|
||||
var/obj/item/organ/internal/brain/candidate = locate(/obj/item/organ/internal/brain) in contents
|
||||
if(!candidate || !candidate.brainmob || !candidate.brainmob.mind)
|
||||
@@ -755,7 +783,7 @@ GLOBAL_LIST_INIT(strippable_corgi_items, create_strippable_list(list(
|
||||
to_chat(src, span_notice("Your name is now <b>[new_name]</b>!"))
|
||||
name = new_name
|
||||
|
||||
/mob/living/simple_animal/pet/dog/breaddog/Life(delta_time = SSMOBS_DT, times_fired)
|
||||
/mob/living/basic/pet/dog/breaddog/Life(delta_time = SSMOBS_DT, times_fired)
|
||||
..()
|
||||
if(stat)
|
||||
return
|
||||
@@ -766,7 +794,7 @@ GLOBAL_LIST_INIT(strippable_corgi_items, create_strippable_list(list(
|
||||
for(var/mob/living/carbon/humanoid_entities in view(3, src)) //Mood aura which stay as long you do not wear Sanallite as hat or carry(I will try to make it work with hat someday(obviously weaker than normal one))
|
||||
humanoid_entities.add_mood_event("kobun", /datum/mood_event/kobun)
|
||||
|
||||
/mob/living/simple_animal/pet/dog/breaddog/attack_hand(mob/living/user, list/modifiers)
|
||||
/mob/living/basic/pet/dog/breaddog/attack_hand(mob/living/user, list/modifiers)
|
||||
..()
|
||||
if(user.combat_mode && user.reagents && !stat)
|
||||
user.reagents.add_reagent(/datum/reagent/consumable/nutriment, 0.4)
|
||||
@@ -0,0 +1,150 @@
|
||||
/mob/living/basic/pet
|
||||
icon = 'icons/mob/simple/pets.dmi'
|
||||
mob_size = MOB_SIZE_SMALL
|
||||
mob_biotypes = MOB_ORGANIC|MOB_BEAST
|
||||
blood_volume = BLOOD_VOLUME_NORMAL
|
||||
|
||||
/// if the mob is protected from being renamed by collars.
|
||||
var/unique_pet = FALSE
|
||||
/// If the mob has collar sprites, this is the base of the icon states.
|
||||
var/collar_icon_state = null
|
||||
/// We have a seperate _rest collar icon state when the pet is resting.
|
||||
var/has_collar_resting_icon_state = FALSE
|
||||
|
||||
/// Our collar
|
||||
var/obj/item/clothing/neck/petcollar/collar
|
||||
|
||||
/mob/living/basic/pet/Initialize(mapload)
|
||||
. = ..()
|
||||
|
||||
// String assoc list returns a cached list, so this is like a static list to pass into the element below.
|
||||
var/static/list/habitable_atmos = list(
|
||||
"min_oxy" = 5,
|
||||
"max_oxy" = 0,
|
||||
"min_plas" = 0,
|
||||
"max_plas" = 1,
|
||||
"min_co2" = 0,
|
||||
"max_co2" = 5,
|
||||
"min_n2" = 0,
|
||||
"max_n2" = 0,
|
||||
)
|
||||
|
||||
AddElement(/datum/element/atmos_requirements, atmos_requirements = habitable_atmos, unsuitable_atmos_damage = 1)
|
||||
AddElement(/datum/element/basic_body_temp_sensitive)
|
||||
|
||||
/// Can set the collar var beforehand to start the pet with a collar.
|
||||
if(collar)
|
||||
collar = new(src)
|
||||
|
||||
update_icon(UPDATE_OVERLAYS)
|
||||
|
||||
/mob/living/basic/pet/Destroy()
|
||||
. = ..()
|
||||
|
||||
QDEL_NULL(collar)
|
||||
|
||||
/mob/living/basic/pet/attackby(obj/item/thing, mob/user, params)
|
||||
if(istype(thing, /obj/item/clothing/neck/petcollar) && !collar)
|
||||
add_collar(thing, user)
|
||||
return TRUE
|
||||
|
||||
if(istype(thing, /obj/item/newspaper) && !stat)
|
||||
user.visible_message(span_notice("[user] baps [name] on the nose with the rolled up [thing]."))
|
||||
dance_rotate(src)
|
||||
return TRUE
|
||||
|
||||
return ..()
|
||||
|
||||
/mob/living/basic/pet/update_overlays()
|
||||
. = ..()
|
||||
|
||||
if(!collar || !collar_icon_state)
|
||||
return
|
||||
|
||||
// Determine which status tag to add to the middle of the icon state.
|
||||
var/dead_tag = stat == DEAD ? "_dead" : null
|
||||
var/rest_tag = has_collar_resting_icon_state && resting ? "_rest" : null
|
||||
var/stat_tag = dead_tag || rest_tag || ""
|
||||
|
||||
. += mutable_appearance(icon, "[collar_icon_state][stat_tag]collar")
|
||||
. += mutable_appearance(icon, "[collar_icon_state][stat_tag]tag")
|
||||
|
||||
/mob/living/basic/pet/gib()
|
||||
. = ..()
|
||||
|
||||
remove_collar(drop_location(), update_visuals = FALSE)
|
||||
|
||||
/mob/living/basic/pet/revive(full_heal_flags = NONE, excess_healing = 0, force_grab_ghost = FALSE)
|
||||
. = ..()
|
||||
if(!.)
|
||||
return
|
||||
|
||||
update_icon(UPDATE_OVERLAYS)
|
||||
|
||||
/mob/living/basic/pet/death(gibbed)
|
||||
. = ..()
|
||||
add_memory_in_range(src, 7, MEMORY_PET_DEAD, list(DETAIL_DEUTERAGONIST = src), story_value = STORY_VALUE_AMAZING, memory_flags = MEMORY_CHECK_BLIND_AND_DEAF) //Protagonist is the person memorizing it
|
||||
|
||||
/mob/living/basic/pet/handle_atom_del(atom/deleting_atom)
|
||||
. = ..()
|
||||
|
||||
if(deleting_atom != collar)
|
||||
return
|
||||
|
||||
collar = null
|
||||
|
||||
if(QDELETED(src))
|
||||
return
|
||||
|
||||
update_icon(UPDATE_OVERLAYS)
|
||||
|
||||
/mob/living/basic/pet/update_stat()
|
||||
. = ..()
|
||||
|
||||
update_icon(UPDATE_OVERLAYS)
|
||||
|
||||
/mob/living/basic/pet/set_resting(new_resting, silent, instant)
|
||||
. = ..()
|
||||
|
||||
if(!has_collar_resting_icon_state)
|
||||
return
|
||||
|
||||
update_icon(UPDATE_OVERLAYS)
|
||||
|
||||
/**
|
||||
* Add a collar to the pet.
|
||||
*
|
||||
* Arguments:
|
||||
* * new_collar - the collar.
|
||||
* * user - the user that did it.
|
||||
*/
|
||||
/mob/living/basic/pet/proc/add_collar(obj/item/clothing/neck/petcollar/new_collar, mob/user)
|
||||
if(QDELETED(new_collar) || collar)
|
||||
return
|
||||
if(!user.transferItemToLoc(new_collar, src))
|
||||
return
|
||||
|
||||
collar = new_collar
|
||||
if(collar_icon_state)
|
||||
update_icon(UPDATE_OVERLAYS)
|
||||
|
||||
to_chat(user, span_notice("You put [new_collar] around [src]'s neck."))
|
||||
if(new_collar.tagname && !unique_pet)
|
||||
fully_replace_character_name(null, "\proper [new_collar.tagname]")
|
||||
|
||||
/**
|
||||
* Remove the collar from the pet.
|
||||
*/
|
||||
/mob/living/basic/pet/proc/remove_collar(atom/new_loc, update_visuals = TRUE)
|
||||
if(!collar)
|
||||
return
|
||||
|
||||
var/obj/old_collar = collar
|
||||
|
||||
collar.forceMove(new_loc)
|
||||
collar = null
|
||||
|
||||
if(collar_icon_state && update_visuals)
|
||||
update_icon(UPDATE_OVERLAYS)
|
||||
|
||||
return old_collar
|
||||
@@ -20,6 +20,7 @@
|
||||
spread_bodyparts(no_brain, no_organs)
|
||||
|
||||
spawn_gibs(no_bodyparts)
|
||||
SEND_SIGNAL(src, COMSIG_LIVING_GIBBED, no_brain, no_organs, no_bodyparts)
|
||||
qdel(src)
|
||||
|
||||
/mob/living/proc/gib_animation()
|
||||
|
||||
@@ -615,6 +615,7 @@
|
||||
to_chat(src, "<span class='notice'>You stand up.</span>")*/
|
||||
get_up(instant)
|
||||
|
||||
SEND_SIGNAL(src, COMSIG_LIVING_RESTING, new_resting, silent, instant)
|
||||
update_resting()
|
||||
|
||||
|
||||
@@ -1423,9 +1424,9 @@
|
||||
/mob/living/simple_animal/hostile/megafauna/dragon/lesser,
|
||||
/mob/living/simple_animal/hostile/gorilla,
|
||||
/mob/living/simple_animal/parrot,
|
||||
/mob/living/simple_animal/pet/dog/corgi,
|
||||
/mob/living/basic/pet/dog/corgi,
|
||||
/mob/living/simple_animal/crab,
|
||||
/mob/living/simple_animal/pet/dog/pug,
|
||||
/mob/living/basic/pet/dog/pug,
|
||||
/mob/living/simple_animal/pet/cat,
|
||||
/mob/living/basic/mouse,
|
||||
/mob/living/simple_animal/chicken,
|
||||
@@ -1434,7 +1435,7 @@
|
||||
/mob/living/simple_animal/pet/fox,
|
||||
/mob/living/simple_animal/butterfly,
|
||||
/mob/living/simple_animal/pet/cat/cak,
|
||||
/mob/living/simple_animal/pet/dog/breaddog,
|
||||
/mob/living/basic/pet/dog/breaddog,
|
||||
/mob/living/simple_animal/chick,
|
||||
)
|
||||
new_mob = new picked_animal(loc)
|
||||
|
||||
@@ -31,7 +31,8 @@
|
||||
mobility_flags = MOBILITY_FLAGS_REST_CAPABLE_DEFAULT
|
||||
var/mob/living/basic/mouse/movement_target
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
collar_type = "cat"
|
||||
collar_icon_state = "cat"
|
||||
has_collar_resting_icon_state = TRUE
|
||||
can_be_held = TRUE
|
||||
held_state = "cat2"
|
||||
///only for attacking rats
|
||||
@@ -72,7 +73,7 @@
|
||||
icon_state = "breadcat"
|
||||
icon_living = "breadcat"
|
||||
icon_dead = "breadcat_dead"
|
||||
collar_type = null
|
||||
collar_icon_state = null
|
||||
held_state = "breadcat"
|
||||
butcher_results = list(/obj/item/food/meat/slab = 2, /obj/item/organ/internal/ears/cat = 1, /obj/item/organ/external/tail/cat = 1, /obj/item/food/breadslice/plain = 1)
|
||||
|
||||
@@ -86,12 +87,13 @@
|
||||
icon_state = "original"
|
||||
icon_living = "original"
|
||||
icon_dead = "original_dead"
|
||||
collar_type = null
|
||||
collar_icon_state = null
|
||||
unique_pet = TRUE
|
||||
held_state = "original"
|
||||
|
||||
/mob/living/simple_animal/pet/cat/original/add_cell_sample()
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/pet/cat/kitten
|
||||
name = "kitten"
|
||||
desc = "D'aaawwww."
|
||||
@@ -101,7 +103,7 @@
|
||||
density = FALSE
|
||||
pass_flags = PASSMOB
|
||||
mob_size = MOB_SIZE_SMALL
|
||||
collar_type = "kitten"
|
||||
collar_icon_state = "kitten"
|
||||
|
||||
//RUNTIME IS ALIVE! SQUEEEEEEEE~
|
||||
/mob/living/simple_animal/pet/cat/runtime
|
||||
@@ -199,11 +201,8 @@
|
||||
return
|
||||
if (resting)
|
||||
icon_state = "[icon_living]_rest"
|
||||
collar_type = "[initial(collar_type)]_rest"
|
||||
else
|
||||
icon_state = "[icon_living]"
|
||||
collar_type = "[initial(collar_type)]"
|
||||
regenerate_icons()
|
||||
|
||||
|
||||
/mob/living/simple_animal/pet/cat/Life(delta_time = SSMOBS_DT, times_fired)
|
||||
@@ -215,7 +214,7 @@
|
||||
manual_emote(pick("sits down.", "crouches on [p_their()] hind legs.", "looks alert."))
|
||||
set_resting(TRUE)
|
||||
icon_state = "[icon_living]_sit"
|
||||
collar_type = "[initial(collar_type)]_sit"
|
||||
cut_overlays() // No collar support in sitting state
|
||||
else if(DT_PROB(0.5, delta_time))
|
||||
if (resting)
|
||||
manual_emote(pick("gets up and meows.", "walks around.", "stops resting."))
|
||||
|
||||
@@ -63,10 +63,6 @@
|
||||
/mob/living/simple_animal/pet/gondola/can_speak(allow_mimes = FALSE)
|
||||
return FALSE // Gondolas are the silent walker.
|
||||
|
||||
/// Special handling for gondolas, as they don't use icon_states and instead rely on overlays. The parent of this proc deletes all our overlays, so we're overriding it.
|
||||
/mob/living/simple_animal/pet/gondola/regenerate_icons()
|
||||
return
|
||||
|
||||
#undef GONDOLA_HEIGHT
|
||||
#undef GONDOLA_COLOR
|
||||
#undef GONDOLA_MOUSTACHE
|
||||
|
||||
@@ -3,77 +3,138 @@
|
||||
mob_size = MOB_SIZE_SMALL
|
||||
mob_biotypes = MOB_ORGANIC|MOB_BEAST
|
||||
blood_volume = BLOOD_VOLUME_NORMAL
|
||||
var/unique_pet = FALSE // if the mob can be renamed
|
||||
var/obj/item/clothing/neck/petcollar/pcollar
|
||||
var/collar_type //if the mob has collar sprites, define them.
|
||||
|
||||
/mob/living/simple_animal/pet/handle_atom_del(atom/A)
|
||||
if(A == pcollar)
|
||||
pcollar = null
|
||||
return ..()
|
||||
/// if the mob is protected from being renamed by collars.
|
||||
var/unique_pet = FALSE
|
||||
/// If the mob has collar sprites, this is the base of the icon states.
|
||||
var/collar_icon_state
|
||||
/// We have a seperate _rest collar icon state when the pet is resting.
|
||||
var/has_collar_resting_icon_state = FALSE
|
||||
|
||||
/mob/living/simple_animal/pet/proc/add_collar(obj/item/clothing/neck/petcollar/P, mob/user)
|
||||
if(QDELETED(P) || pcollar)
|
||||
return
|
||||
if(!user.transferItemToLoc(P, src))
|
||||
return
|
||||
pcollar = P
|
||||
regenerate_icons()
|
||||
to_chat(user, span_notice("You put the [P] around [src]'s neck."))
|
||||
if(P.tagname && !unique_pet)
|
||||
fully_replace_character_name(null, "\proper [P.tagname]")
|
||||
|
||||
/mob/living/simple_animal/pet/attackby(obj/item/O, mob/user, params)
|
||||
if(istype(O, /obj/item/clothing/neck/petcollar) && !pcollar)
|
||||
add_collar(O, user)
|
||||
return
|
||||
|
||||
if(istype(O, /obj/item/newspaper))
|
||||
if(!stat)
|
||||
user.visible_message(span_notice("[user] baps [name] on the nose with the rolled up [O]."))
|
||||
dance_rotate(src)
|
||||
else
|
||||
..()
|
||||
/// Our collar
|
||||
var/obj/item/clothing/neck/petcollar/collar
|
||||
|
||||
/mob/living/simple_animal/pet/Initialize(mapload)
|
||||
. = ..()
|
||||
if(pcollar)
|
||||
pcollar = new(src)
|
||||
regenerate_icons()
|
||||
|
||||
/// Can set the collar var beforehand to start the pet with a collar.
|
||||
if(collar)
|
||||
collar = new(src)
|
||||
|
||||
update_icon(UPDATE_OVERLAYS)
|
||||
|
||||
/mob/living/simple_animal/pet/Destroy()
|
||||
QDEL_NULL(pcollar)
|
||||
. = ..()
|
||||
|
||||
QDEL_NULL(collar)
|
||||
QDEL_NULL(access_card)
|
||||
|
||||
/mob/living/simple_animal/pet/attackby(obj/item/thing, mob/user, params)
|
||||
if(istype(thing, /obj/item/clothing/neck/petcollar) && !collar)
|
||||
add_collar(thing, user)
|
||||
return TRUE
|
||||
|
||||
if(istype(thing, /obj/item/newspaper) && !stat)
|
||||
user.visible_message(span_notice("[user] baps [name] on the nose with the rolled up [thing]."))
|
||||
dance_rotate(src)
|
||||
return TRUE
|
||||
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/pet/update_overlays()
|
||||
. = ..()
|
||||
|
||||
if(!collar || !collar_icon_state)
|
||||
return
|
||||
|
||||
// Determine which status tag to add to the middle of the icon state.
|
||||
var/dead_tag = stat == DEAD ? "_dead" : null
|
||||
var/rest_tag = has_collar_resting_icon_state && resting ? "_rest" : null
|
||||
var/stat_tag = dead_tag || rest_tag || ""
|
||||
|
||||
. += mutable_appearance(icon, "[collar_icon_state][stat_tag]collar")
|
||||
. += mutable_appearance(icon, "[collar_icon_state][stat_tag]tag")
|
||||
|
||||
/mob/living/simple_animal/pet/gib()
|
||||
if(pcollar)
|
||||
pcollar.forceMove(drop_location())
|
||||
pcollar = null
|
||||
. = ..()
|
||||
|
||||
if(access_card)
|
||||
access_card.forceMove(drop_location())
|
||||
access_card = null
|
||||
return ..()
|
||||
|
||||
remove_collar(drop_location(), update_visuals = FALSE)
|
||||
|
||||
/mob/living/simple_animal/pet/revive(full_heal_flags = NONE, excess_healing = 0, force_grab_ghost = FALSE)
|
||||
. = ..()
|
||||
if(!.)
|
||||
return
|
||||
|
||||
if(collar_type)
|
||||
collar_type = "[initial(collar_type)]"
|
||||
regenerate_icons()
|
||||
update_icon(UPDATE_OVERLAYS)
|
||||
|
||||
/mob/living/simple_animal/pet/death(gibbed)
|
||||
. = ..()
|
||||
if(collar_type)
|
||||
collar_type = "[initial(collar_type)]_dead"
|
||||
regenerate_icons()
|
||||
|
||||
add_memory_in_range(src, 7, MEMORY_PET_DEAD, list(DETAIL_DEUTERAGONIST = src), story_value = STORY_VALUE_AMAZING, memory_flags = MEMORY_CHECK_BLIND_AND_DEAF) //Protagonist is the person memorizing it
|
||||
|
||||
/mob/living/simple_animal/pet/regenerate_icons()
|
||||
cut_overlays()
|
||||
if(pcollar && collar_type)
|
||||
add_overlay("[collar_type]collar")
|
||||
add_overlay("[collar_type]tag")
|
||||
/mob/living/simple_animal/pet/handle_atom_del(atom/deleting_atom)
|
||||
. = ..()
|
||||
|
||||
if(deleting_atom != collar)
|
||||
return
|
||||
|
||||
collar = null
|
||||
|
||||
if(QDELETED(src))
|
||||
return
|
||||
|
||||
update_icon(UPDATE_OVERLAYS)
|
||||
|
||||
/mob/living/simple_animal/pet/update_stat()
|
||||
. = ..()
|
||||
|
||||
update_icon(UPDATE_OVERLAYS)
|
||||
|
||||
/mob/living/simple_animal/pet/set_resting(new_resting, silent, instant)
|
||||
. = ..()
|
||||
|
||||
if(!has_collar_resting_icon_state)
|
||||
return
|
||||
|
||||
update_icon(UPDATE_OVERLAYS)
|
||||
|
||||
/**
|
||||
* Add a collar to the pet.
|
||||
*
|
||||
* Arguments:
|
||||
* * new_collar - the collar.
|
||||
* * user - the user that did it.
|
||||
*/
|
||||
/mob/living/simple_animal/pet/proc/add_collar(obj/item/clothing/neck/petcollar/new_collar, mob/user)
|
||||
if(QDELETED(new_collar) || collar)
|
||||
return
|
||||
if(!user.transferItemToLoc(new_collar, src))
|
||||
return
|
||||
|
||||
collar = new_collar
|
||||
if(collar_icon_state)
|
||||
update_icon(UPDATE_OVERLAYS)
|
||||
|
||||
to_chat(user, span_notice("You put [new_collar] around [src]'s neck."))
|
||||
if(new_collar.tagname && !unique_pet)
|
||||
fully_replace_character_name(null, "\proper [new_collar.tagname]")
|
||||
|
||||
/**
|
||||
* Remove the collar from the pet.
|
||||
*/
|
||||
/mob/living/simple_animal/pet/proc/remove_collar(atom/new_loc, update_visuals = TRUE)
|
||||
if(!collar)
|
||||
return
|
||||
|
||||
var/obj/old_collar = collar
|
||||
|
||||
collar.forceMove(new_loc)
|
||||
collar = null
|
||||
|
||||
if(collar_icon_state && update_visuals)
|
||||
update_icon(UPDATE_OVERLAYS)
|
||||
|
||||
return old_collar
|
||||
|
||||
@@ -264,7 +264,7 @@
|
||||
for(var/t in bodyparts) //this really should not be necessary
|
||||
qdel(t)
|
||||
|
||||
var/mob/living/simple_animal/pet/dog/corgi/new_corgi = new /mob/living/simple_animal/pet/dog/corgi (loc)
|
||||
var/mob/living/basic/pet/dog/corgi/new_corgi = new /mob/living/basic/pet/dog/corgi (loc)
|
||||
new_corgi.set_combat_mode(TRUE)
|
||||
new_corgi.key = key
|
||||
|
||||
@@ -368,7 +368,7 @@
|
||||
//Good mobs!
|
||||
if(ispath(MP, /mob/living/simple_animal/pet/cat))
|
||||
return TRUE
|
||||
if(ispath(MP, /mob/living/simple_animal/pet/dog/corgi))
|
||||
if(ispath(MP, /mob/living/basic/pet/dog/corgi))
|
||||
return TRUE
|
||||
if(ispath(MP, /mob/living/simple_animal/crab))
|
||||
return TRUE
|
||||
|
||||
@@ -562,7 +562,7 @@
|
||||
/datum/chemical_reaction/corgium/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
|
||||
var/location = get_turf(holder.my_atom)
|
||||
for(var/i in rand(1, created_volume) to created_volume) // More lulz.
|
||||
new /mob/living/simple_animal/pet/dog/corgi(location)
|
||||
new /mob/living/basic/pet/dog/corgi(location)
|
||||
..()
|
||||
|
||||
//monkey powder heehoo
|
||||
|
||||
@@ -94,7 +94,7 @@
|
||||
/obj/machinery/rnd/experimentor/Initialize(mapload)
|
||||
. = ..()
|
||||
|
||||
tracked_ian_ref = WEAKREF(locate(/mob/living/simple_animal/pet/dog/corgi/ian) in GLOB.mob_living_list)
|
||||
tracked_ian_ref = WEAKREF(locate(/mob/living/basic/pet/dog/corgi/ian) in GLOB.mob_living_list)
|
||||
tracked_runtime_ref = WEAKREF(locate(/mob/living/simple_animal/pet/cat/runtime) in GLOB.mob_living_list)
|
||||
|
||||
critical_items_typecache = typecacheof(list(
|
||||
@@ -498,7 +498,7 @@
|
||||
tracked_ian.forceMove(loc)
|
||||
investigate_log("Experimentor has stolen Ian!", INVESTIGATE_EXPERIMENTOR) //...if anyone ever fixes it...
|
||||
else
|
||||
new /mob/living/simple_animal/pet/dog/corgi(loc)
|
||||
new /mob/living/basic/pet/dog/corgi(loc)
|
||||
investigate_log("Experimentor has spawned a new corgi.", INVESTIGATE_EXPERIMENTOR)
|
||||
ejectItem(TRUE)
|
||||
if(globalMalf > 36 && globalMalf < 50)
|
||||
@@ -616,8 +616,8 @@
|
||||
|
||||
/obj/item/relic/proc/corgicannon(mob/user)
|
||||
playsound(src, SFX_SPARKS, rand(25,50), TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
|
||||
var/mob/living/simple_animal/pet/dog/corgi/C = new/mob/living/simple_animal/pet/dog/corgi(get_turf(user))
|
||||
C.throw_at(pick(oview(10,user)), 10, rand(3,8), callback = CALLBACK(src, PROC_REF(throwSmoke), C))
|
||||
var/mob/living/basic/pet/dog/corgi/sad_corgi = new(get_turf(user))
|
||||
sad_corgi.throw_at(pick(oview(10,user)), 10, rand(3,8), callback = CALLBACK(src, PROC_REF(throwSmoke), sad_corgi))
|
||||
warn_admins(user, "Corgi Cannon", 0)
|
||||
|
||||
/obj/item/relic/proc/clean(mob/user)
|
||||
@@ -642,12 +642,12 @@
|
||||
/mob/living/simple_animal/parrot/natural,
|
||||
/mob/living/simple_animal/butterfly,
|
||||
/mob/living/simple_animal/pet/cat,
|
||||
/mob/living/simple_animal/pet/dog/corgi,
|
||||
/mob/living/basic/pet/dog/corgi,
|
||||
/mob/living/basic/pet/dog/pug,
|
||||
/mob/living/simple_animal/crab,
|
||||
/mob/living/simple_animal/pet/fox,
|
||||
/mob/living/simple_animal/hostile/lizard,
|
||||
/mob/living/basic/mouse,
|
||||
/mob/living/simple_animal/pet/dog/pug,
|
||||
/mob/living/simple_animal/hostile/bear,
|
||||
/mob/living/simple_animal/hostile/bee,
|
||||
/mob/living/simple_animal/hostile/carp,
|
||||
|
||||
@@ -38,7 +38,7 @@ Slimecrossing Mobs
|
||||
return
|
||||
|
||||
//Slime corgi - Chilling Pink
|
||||
/mob/living/simple_animal/pet/dog/corgi/puppy/slime
|
||||
/mob/living/basic/pet/dog/corgi/puppy/slime
|
||||
name = "\improper slime corgi puppy"
|
||||
real_name = "slime corgi puppy"
|
||||
desc = "An unbearably cute pink slime corgi puppy."
|
||||
@@ -48,5 +48,8 @@ Slimecrossing Mobs
|
||||
nofur = TRUE
|
||||
gold_core_spawnable = NO_SPAWN
|
||||
speak_emote = list("blorbles", "bubbles", "borks")
|
||||
emote_hear = list("bubbles!", "splorts.", "splops!")
|
||||
emote_see = list("gets goop everywhere.", "flops.", "jiggles!")
|
||||
|
||||
/mob/living/basic/pet/dog/corgi/puppy/slime/update_dog_speech(datum/ai_planning_subtree/random_speech/speech)
|
||||
speech.speak = string_list(list())
|
||||
speech.emote_hear = string_list(list("bubbles!", "splorts.", "splops!"))
|
||||
speech.emote_see = string_list(list("gets goop everywhere.", "flops.", "jiggles!"))
|
||||
|
||||
@@ -269,7 +269,7 @@ Chilling extracts:
|
||||
|
||||
/obj/item/slimecross/chilling/pink/do_effect(mob/user)
|
||||
user.visible_message(span_notice("[src] cracks like an egg, and an adorable puppy comes tumbling out!"))
|
||||
new /mob/living/simple_animal/pet/dog/corgi/puppy/slime(get_turf(user))
|
||||
new /mob/living/basic/pet/dog/corgi/puppy/slime(get_turf(user))
|
||||
..()
|
||||
|
||||
/obj/item/slimecross/chilling/gold
|
||||
|
||||
@@ -128,7 +128,7 @@
|
||||
/datum/reagent/consumable/coco = -2)
|
||||
|
||||
virus_suspectibility = 1
|
||||
resulting_atoms = list(/mob/living/simple_animal/pet/dog/corgi = 1)
|
||||
resulting_atoms = list(/mob/living/basic/pet/dog/corgi = 1)
|
||||
|
||||
/datum/micro_organism/cell_line/pug
|
||||
desc = "Squat canid cells"
|
||||
@@ -146,7 +146,7 @@
|
||||
/datum/reagent/consumable/coco = -2)
|
||||
|
||||
virus_suspectibility = 3
|
||||
resulting_atoms = list(/mob/living/simple_animal/pet/dog/pug = 1)
|
||||
resulting_atoms = list(/mob/living/basic/pet/dog/pug = 1)
|
||||
|
||||
/datum/micro_organism/cell_line/bear //bears can't really compete directly with more powerful creatures, so i made it possible to grow them real fast.
|
||||
desc = "Ursine cells"
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
possible_shapes = list(
|
||||
/mob/living/basic/mouse,
|
||||
/mob/living/simple_animal/pet/dog/corgi,
|
||||
/mob/living/basic/pet/dog/corgi,
|
||||
/mob/living/simple_animal/hostile/carp/ranged/chaos,
|
||||
/mob/living/simple_animal/bot/secbot/ed209,
|
||||
/mob/living/simple_animal/hostile/giant_spider/viper/wizard,
|
||||
|
||||
@@ -5,9 +5,8 @@
|
||||
/datum/unit_test/actions_moved_on_mind_transfer
|
||||
|
||||
/datum/unit_test/actions_moved_on_mind_transfer/Run()
|
||||
|
||||
var/mob/living/carbon/human/wizard = allocate(/mob/living/carbon/human/consistent)
|
||||
var/mob/living/simple_animal/pet/dog/corgi/wizard_dog = allocate(/mob/living/simple_animal/pet/dog/corgi)
|
||||
var/mob/living/basic/pet/dog/corgi/wizard_dog = allocate(/mob/living/basic/pet/dog/corgi)
|
||||
wizard.mind_initialize()
|
||||
|
||||
var/datum/action/cooldown/spell/pointed/projectile/fireball/fireball = new(wizard.mind)
|
||||
|
||||
@@ -356,20 +356,6 @@
|
||||
/mob/living/simple_animal/pet/cat/original,
|
||||
/mob/living/simple_animal/pet/cat/runtime,
|
||||
/mob/living/simple_animal/pet/cat/space,
|
||||
/mob/living/simple_animal/pet/dog,
|
||||
/mob/living/simple_animal/pet/dog/breaddog,
|
||||
/mob/living/simple_animal/pet/dog/bullterrier,
|
||||
/mob/living/simple_animal/pet/dog/corgi,
|
||||
/mob/living/simple_animal/pet/dog/corgi/exoticcorgi,
|
||||
/mob/living/simple_animal/pet/dog/corgi/ian,
|
||||
/mob/living/simple_animal/pet/dog/corgi/lisa,
|
||||
/mob/living/simple_animal/pet/dog/corgi/narsie,
|
||||
/mob/living/simple_animal/pet/dog/corgi/puppy,
|
||||
/mob/living/simple_animal/pet/dog/corgi/puppy/ian,
|
||||
/mob/living/simple_animal/pet/dog/corgi/puppy/slime,
|
||||
/mob/living/simple_animal/pet/dog/corgi/puppy/void,
|
||||
/mob/living/simple_animal/pet/dog/pug,
|
||||
/mob/living/simple_animal/pet/dog/pug/mcgriff,
|
||||
/mob/living/simple_animal/pet/fox,
|
||||
/mob/living/simple_animal/pet/fox/renault,
|
||||
/mob/living/simple_animal/pet/gondola,
|
||||
@@ -497,10 +483,6 @@
|
||||
/mob/living/simple_animal/hostile/zombie/cheesezombie,
|
||||
/mob/living/simple_animal/hostile/zombie/nocorpse,
|
||||
/mob/living/simple_animal/pet/bumbles,
|
||||
/mob/living/simple_animal/pet/dog/corgi/borgi,
|
||||
/mob/living/simple_animal/pet/dog/dobermann,
|
||||
/mob/living/simple_animal/pet/dog/dobermann/walter,
|
||||
/mob/living/simple_animal/pet/dog/markus,
|
||||
/mob/living/simple_animal/pet/gondola/funky,
|
||||
/mob/living/simple_animal/pet/poppy,
|
||||
|
||||
|
||||
@@ -59,5 +59,5 @@
|
||||
ADD_TRAIT(rouny, TRAIT_PRESERVE_UI_WITHOUT_CLIENT, TRAIT_SOURCE_UNIT_TESTS)
|
||||
TEST_ASSERT_EQUAL(strip_menu.ui_status(rouny, ui_state), UI_INTERACTIVE, "Being within range as a xeno was not interactive.")
|
||||
|
||||
var/mob/living/simple_animal/pet/dog/corgi/corgi = allocate(/mob/living/simple_animal/pet/dog/corgi, run_loc_floor_bottom_left)
|
||||
var/mob/living/basic/pet/dog/corgi/corgi = allocate(/mob/living/basic/pet/dog/corgi, run_loc_floor_bottom_left)
|
||||
TEST_ASSERT_EQUAL(strip_menu.ui_status(corgi, ui_state), UI_UPDATE, "Being within range as a corgi was not update-only.")
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
/datum/traitor_objective/kill_pet
|
||||
possible_heads = list(
|
||||
JOB_HEAD_OF_PERSONNEL = list(
|
||||
/mob/living/simple_animal/pet/dog/corgi/ian,
|
||||
/mob/living/simple_animal/pet/dog/corgi/puppy/ian
|
||||
/mob/living/basic/pet/dog/corgi/ian,
|
||||
/mob/living/basic/pet/dog/corgi/puppy/ian
|
||||
),
|
||||
JOB_CAPTAIN = /mob/living/simple_animal/pet/fox/renault,
|
||||
JOB_CHIEF_MEDICAL_OFFICER = /mob/living/simple_animal/pet/cat/runtime,
|
||||
@@ -15,7 +15,7 @@
|
||||
),
|
||||
// Non-heads like the warden, these are automatically medium-risk at minimum
|
||||
// They are also the only two modular additions so far
|
||||
JOB_ROBOTICIST = /mob/living/simple_animal/pet/dog/corgi/borgi,
|
||||
JOB_ROBOTICIST = /mob/living/basic/pet/dog/corgi/borgi,
|
||||
JOB_STATION_ENGINEER = /mob/living/simple_animal/pet/poppy,
|
||||
)
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
succeed_signals = list(COMSIG_PARENT_QDELETING)) // Until dusting gets its own component, this has to make do
|
||||
|
||||
// Emag E-N so it overloads
|
||||
if(istype(target_pet, /mob/living/simple_animal/pet/dog/corgi/borgi))
|
||||
if(istype(target_pet, /mob/living/basic/pet/dog/corgi/borgi))
|
||||
name = "Emag the roboticist's most-prized borgi, E-N"
|
||||
description = "We received an untracable contract from someone addressed 'ianfan2489@solfed.nt', they want the robotic clone of Ian dead- and it has to be dramatic. We will supply you with a cryptographic sequencer from our basic loadout options to shortcircuit E-N's safety, it will give you a single attempt to use it. Oh, and remember to run like hell when you do... "
|
||||
telecrystal_reward = 3 // Because these are more complicated than 'kill the pet', the reward is bigger
|
||||
@@ -88,7 +88,7 @@
|
||||
// Handle the UI button, this is currently just generated by a modular objective
|
||||
/datum/traitor_objective/kill_pet/generate_ui_buttons(mob/user)
|
||||
var/list/buttons = list()
|
||||
if(istype(target_pet, /mob/living/simple_animal/pet/dog/corgi/borgi)) // Target has to be E-N
|
||||
if(istype(target_pet, /mob/living/basic/pet/dog/corgi/borgi)) // Target has to be E-N
|
||||
if(!one_shot_emag)
|
||||
buttons += add_ui_button("", "Pressing this will materialize a single-use cryptographic sequencer in your hand, which you can use to shortcircuit E-N.", "bolt", "summon_emag")
|
||||
return buttons
|
||||
|
||||
+185
-84
@@ -1,4 +1,4 @@
|
||||
/mob/living/simple_animal/pet/dog/markus
|
||||
/mob/living/basic/pet/dog/markus
|
||||
name = "\proper Markus"
|
||||
real_name = "Markus"
|
||||
gender = MALE
|
||||
@@ -7,14 +7,20 @@
|
||||
icon_state = "markus"
|
||||
icon_dead = "markus_dead"
|
||||
icon_living = "markus"
|
||||
speak = list("Borf!", "Boof!", "Bork!", "Bowwow!", "Burg?")
|
||||
var/static/list/markus_speak = list("Borf!", "Boof!", "Bork!", "Bowwow!", "Burg?")
|
||||
butcher_results = list(/obj/item/food/burger/cheese = 1, /obj/item/food/meat/slab = 2, /obj/item/trash/syndi_cakes = 1)
|
||||
animal_species = /mob/living/simple_animal/pet/dog
|
||||
ai_controller = /datum/ai_controller/dog/corgi
|
||||
gender = MALE
|
||||
can_be_held = FALSE
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
|
||||
/mob/living/simple_animal/pet/dog/markus/treat_message(message)
|
||||
return client ? pick(speak) : message // markus only talks business
|
||||
/mob/living/basic/pet/dog/markus/treat_message(message)
|
||||
return client ? pick(markus_speak) : message // markus only talks business
|
||||
|
||||
/mob/living/basic/pet/dog/markus/update_dog_speech(datum/ai_planning_subtree/random_speech/speech)
|
||||
. = ..()
|
||||
|
||||
speech.speak = markus_speak
|
||||
|
||||
/datum/chemical_reaction/mark_reaction
|
||||
results = list(/datum/reagent/liquidgibs = 15)
|
||||
@@ -32,10 +38,10 @@
|
||||
/datum/chemical_reaction/mark_reaction/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
|
||||
. = ..()
|
||||
var/location = get_turf(holder.my_atom)
|
||||
new /mob/living/simple_animal/pet/dog/markus(location)
|
||||
new /mob/living/basic/pet/dog/markus(location)
|
||||
playsound(location, 'modular_skyrat/master_files/sound/effects/dorime.ogg', 100, 0, 7)
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/borgi
|
||||
/mob/living/basic/pet/dog/corgi/borgi
|
||||
name = "E-N"
|
||||
real_name = "E-N" // Intended to hold the name without altering it.
|
||||
gender = NEUTER
|
||||
@@ -48,17 +54,12 @@
|
||||
can_be_held = FALSE
|
||||
maxHealth = 150
|
||||
health = 150
|
||||
var/emagged = 0
|
||||
turns_per_move = 10
|
||||
stop_automated_movement = 0
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
minbodytemp = 0
|
||||
loot = list(/obj/effect/decal/cleanable/oil/slippery)
|
||||
butcher_results = list(/obj/item/clothing/head/corgi/en = 1, /obj/item/clothing/suit/corgisuit/en = 1)
|
||||
death_message = "beeps, its mechanical parts hissing before the chassis collapses in a loud thud."
|
||||
gold_core_spawnable = NO_SPAWN
|
||||
animal_species = /mob/living/simple_animal/pet/dog/corgi
|
||||
nofur = TRUE
|
||||
ai_controller = /datum/ai_controller/dog/borgi
|
||||
|
||||
// These lights enable when E-N is emagged
|
||||
light_system = MOVABLE_LIGHT_DIRECTIONAL
|
||||
light_color = COLOR_RED
|
||||
@@ -66,8 +67,17 @@
|
||||
light_power = 0.8
|
||||
light_on = FALSE
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/borgi/Initialize(mapload)
|
||||
var/emagged = 0
|
||||
|
||||
/mob/living/basic/pet/dog/corgi/borgi/Initialize(mapload)
|
||||
. = ..()
|
||||
|
||||
RemoveElement(/datum/element/atmos_requirements)
|
||||
RemoveElement(/datum/element/basic_body_temp_sensitive)
|
||||
AddElement(/datum/element/basic_body_temp_sensitive, min_body_temp = 0)
|
||||
var/static/list/borgi_drops = list(/obj/effect/decal/cleanable/oil/slippery)
|
||||
AddElement(/datum/element/death_drops, borgi_drops)
|
||||
|
||||
var/datum/component/overlay_lighting/lighting_object = src.GetComponent(/datum/component/overlay_lighting)
|
||||
var/image/cone = lighting_object.cone
|
||||
cone.transform = cone.transform.Translate(0, -8)
|
||||
@@ -79,55 +89,78 @@
|
||||
// For traitor objectives
|
||||
RegisterSignal(src, COMSIG_ATOM_EMAG_ACT, PROC_REF(on_emag_act))
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/borgi/proc/on_attack_hand(datum/source, mob/living/target)
|
||||
if(target.combat_mode && health > 0)
|
||||
shootAt(target)
|
||||
var/datum/ai_controller/dog/EN = ai_controller
|
||||
if(health <= 30 && !(WEAKREF(target) in EN.blackboard[BB_DOG_FRIENDS]))
|
||||
EN.current_movement_target = target
|
||||
EN.blackboard[BB_DOG_HARASS_TARGET] = WEAKREF(target)
|
||||
EN.current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/harass)
|
||||
/**
|
||||
* Try to harass a target, considering if they are a friend.
|
||||
*
|
||||
* Arguments:
|
||||
* * target - the target to harrass
|
||||
* * always_shoot - always shoot the target, as opposed to only if not a friend.
|
||||
*/
|
||||
/mob/living/basic/pet/dog/corgi/borgi/proc/harass_target(mob/living/target, always_shoot = FALSE)
|
||||
var/datum/ai_controller/dog/EN = ai_controller
|
||||
if(!EN)
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/borgi/proc/on_attackby(datum/source, obj/item/used_item, mob/living/target)
|
||||
if(used_item.force && used_item.damtype != STAMINA && health > 0)
|
||||
shootAt(target)
|
||||
var/datum/ai_controller/dog/EN = ai_controller
|
||||
if(health <= 30 && !(WEAKREF(target) in EN.blackboard[BB_DOG_FRIENDS]))
|
||||
EN.current_movement_target = target
|
||||
EN.blackboard[BB_DOG_HARASS_TARGET] = WEAKREF(target)
|
||||
EN.current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/harass)
|
||||
var/is_friend = EN.blackboard[BB_DOG_FRIENDS][WEAKREF(target)]
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/borgi/proc/on_hitby(datum/source, atom/movable/AM)
|
||||
if(istype(AM, /obj/item))
|
||||
var/obj/item/used_item = AM
|
||||
var/mob/thrown_by = used_item.thrownby?.resolve()
|
||||
if(used_item.throwforce >= 5 && ishuman(thrown_by) && health > 0)
|
||||
var/mob/living/carbon/human/target = thrown_by
|
||||
var/datum/ai_controller/dog/EN = ai_controller
|
||||
if(!(WEAKREF(target) in EN.blackboard[BB_DOG_FRIENDS]))
|
||||
shootAt(target)
|
||||
if(health <= 30)
|
||||
EN.current_movement_target = target
|
||||
EN.blackboard[BB_DOG_HARASS_TARGET] = WEAKREF(target)
|
||||
EN.current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/harass)
|
||||
if(always_shoot || !is_friend)
|
||||
INVOKE_ASYNC(src, PROC_REF(shoot_at), target)
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/borgi/bullet_act(obj/projectile/proj)
|
||||
if(istype(proj, /obj/projectile/beam) || istype(proj, /obj/projectile/bullet))
|
||||
var/mob/living/carbon/human/target = proj.firer
|
||||
if(!proj.nodamage && proj.damage >= 10)
|
||||
if((proj.damage_type == BRUTE || proj.damage_type == BURN))
|
||||
adjustBruteLoss(proj.damage)
|
||||
if(isliving(target) && health > 0)
|
||||
shootAt(target)
|
||||
var/datum/ai_controller/dog/EN = ai_controller
|
||||
EN.current_movement_target = target
|
||||
EN.blackboard[BB_DOG_HARASS_TARGET] = WEAKREF(target)
|
||||
EN.current_behaviors += GET_AI_BEHAVIOR(/datum/ai_behavior/harass)
|
||||
else
|
||||
shootToyAt(target)
|
||||
return BULLET_ACT_HIT
|
||||
if(health > 30 || is_friend)
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/borgi/proc/shootAt(atom/movable/target)
|
||||
EN.set_movement_target(target)
|
||||
EN.blackboard[BB_DOG_HARASS_TARGET] = WEAKREF(target)
|
||||
EN.queue_behavior(/datum/ai_behavior/harass)
|
||||
|
||||
/mob/living/basic/pet/dog/corgi/borgi/proc/on_attack_hand(datum/source, mob/living/target)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
if(!target.combat_mode || health <= 0)
|
||||
return
|
||||
|
||||
harass_target(target, always_shoot = TRUE)
|
||||
|
||||
/mob/living/basic/pet/dog/corgi/borgi/proc/on_attackby(datum/source, obj/item/used_item, mob/living/target)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
if(!used_item.force || used_item.damtype == STAMINA || health <= 0)
|
||||
return
|
||||
|
||||
harass_target(target, always_shoot = TRUE)
|
||||
|
||||
/mob/living/basic/pet/dog/corgi/borgi/proc/on_hitby(datum/source, obj/item/used_item)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
if(!istype(used_item) || used_item.throwforce < 5 || health <= 0)
|
||||
return
|
||||
|
||||
var/mob/living/carbon/human/thrown_by = used_item.thrownby?.resolve()
|
||||
if(!ishuman(thrown_by))
|
||||
return
|
||||
|
||||
harass_target(thrown_by)
|
||||
|
||||
/mob/living/basic/pet/dog/corgi/borgi/bullet_act(obj/projectile/proj)
|
||||
. = ..()
|
||||
|
||||
if(!istype(proj, /obj/projectile/beam) && !istype(proj, /obj/projectile/bullet))
|
||||
return
|
||||
|
||||
var/mob/living/carbon/human/target = proj.firer
|
||||
if(!proj.nodamage && proj.damage >= 10)
|
||||
if(proj.damage_type != BRUTE && proj.damage_type != BURN)
|
||||
return
|
||||
|
||||
adjustBruteLoss(proj.damage)
|
||||
if(!isliving(target) || health <= 0)
|
||||
return
|
||||
|
||||
harass_target(target)
|
||||
else
|
||||
shoot_toy_at(target)
|
||||
|
||||
/mob/living/basic/pet/dog/corgi/borgi/proc/shoot_at(atom/movable/target)
|
||||
var/turf/source_turf = get_turf(src)
|
||||
var/turf/target_turf = get_turf(target)
|
||||
if(!source_turf || !target_turf)
|
||||
@@ -141,7 +174,7 @@
|
||||
laser.fired_from = src
|
||||
laser.fire()
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/borgi/proc/shootToyAt(atom/movable/target)
|
||||
/mob/living/basic/pet/dog/corgi/borgi/proc/shoot_toy_at(atom/movable/target)
|
||||
var/turf/source_turf = get_turf(src)
|
||||
var/turf/target_turf = get_turf(target)
|
||||
if(!source_turf || !target_turf)
|
||||
@@ -155,19 +188,14 @@
|
||||
fired_dart.fired_from = src
|
||||
fired_dart.fire()
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/borgi/Life(seconds, times_fired)
|
||||
..()
|
||||
/mob/living/basic/pet/dog/corgi/borgi/Life(seconds, times_fired)
|
||||
. = ..()
|
||||
|
||||
// spark for no reason
|
||||
if(prob(5))
|
||||
do_sparks(3, 1, src)
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/borgi/handle_automated_action()
|
||||
if(emagged && prob(33))
|
||||
var/mob/living/carbon/target = locate() in view(10, src)
|
||||
if(target)
|
||||
shootAt(target)
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/borgi/death(gibbed)
|
||||
/mob/living/basic/pet/dog/corgi/borgi/death(gibbed)
|
||||
// Only execute the below if we successfully died
|
||||
. = ..(gibbed)
|
||||
if(!.)
|
||||
@@ -182,31 +210,105 @@
|
||||
var/datum/ai_controller/dog/EN = ai_controller
|
||||
LAZYCLEARLIST(EN.current_behaviors)
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/borgi/proc/on_emag_act(mob/living/simple_animal/pet/dog/target, mob/user)
|
||||
if(!emagged)
|
||||
emagged = 1
|
||||
/mob/living/basic/pet/dog/corgi/borgi/proc/on_emag_act(mob/living/basic/pet/dog/target, mob/user)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
emote("exclaim")
|
||||
set_light_on(TRUE)
|
||||
if(emagged)
|
||||
return
|
||||
|
||||
add_fingerprint(user, TRUE)
|
||||
investigate_log("has been gibbed due to being emagged by [user].", INVESTIGATE_DEATHS)
|
||||
visible_message(span_boldwarning("[user] swipes a card through [target]!"), span_notice("You overload [target]s internal reactor..."))
|
||||
emagged = 1
|
||||
|
||||
notify_ghosts("[user] has shortcircuited [target] to explode in 60 seconds!", source = target, action = NOTIFY_ORBIT, flashwindow = FALSE, header = "Borgi Emagged")
|
||||
addtimer(CALLBACK(src, PROC_REF(explode_imminent)), 50 SECONDS)
|
||||
// Emote sleeps.
|
||||
INVOKE_ASYNC(src, PROC_REF(emote), "exclaim")
|
||||
set_light_on(TRUE)
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/borgi/proc/explode_imminent()
|
||||
add_fingerprint(user, TRUE)
|
||||
investigate_log("has been gibbed due to being emagged by [user].", INVESTIGATE_DEATHS)
|
||||
visible_message(span_boldwarning("[user] swipes a card through [target]!"), span_notice("You overload [target]s internal reactor..."))
|
||||
|
||||
notify_ghosts("[user] has shortcircuited [target] to explode in 60 seconds!", source = target, action = NOTIFY_ORBIT, flashwindow = FALSE, header = "Borgi Emagged")
|
||||
addtimer(CALLBACK(src, PROC_REF(explode_imminent)), 50 SECONDS)
|
||||
|
||||
/mob/living/basic/pet/dog/corgi/borgi/proc/explode_imminent()
|
||||
visible_message(span_bolddanger("[src] makes an odd whining noise!"))
|
||||
do_jitter_animation(30)
|
||||
|
||||
addtimer(CALLBACK(src, PROC_REF(explode)), 10 SECONDS)
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/borgi/proc/explode()
|
||||
/mob/living/basic/pet/dog/corgi/borgi/proc/explode()
|
||||
explosion(get_turf(src), 1, 2, 4, 4, 6) // Should this be changed?
|
||||
gib() // Yuck, robo-blood
|
||||
|
||||
/mob/living/simple_animal/pet/dog/dobermann
|
||||
/// Dog controller but with emag attack support
|
||||
/datum/ai_controller/dog/borgi
|
||||
blackboard = list(
|
||||
BB_SIMPLE_CARRY_ITEM = null,
|
||||
BB_FETCH_TARGET = null,
|
||||
BB_FETCH_DELIVER_TO = null,
|
||||
BB_DOG_FRIENDS = list(),
|
||||
BB_FETCH_IGNORE_LIST = list(),
|
||||
BB_DOG_ORDER_MODE = DOG_COMMAND_NONE,
|
||||
BB_DOG_PLAYING_DEAD = FALSE,
|
||||
BB_DOG_HARASS_TARGET = null,
|
||||
BB_DOG_HARASS_FRUSTRATION = null,
|
||||
BB_VISION_RANGE = AI_DOG_VISION_RANGE,
|
||||
BB_DOG_IS_SLOW = TRUE,
|
||||
BB_TARGETTING_DATUM = new /datum/targetting_datum/basic(),
|
||||
)
|
||||
|
||||
planning_subtrees = list(
|
||||
/datum/ai_planning_subtree/emagged_borgi,
|
||||
/datum/ai_planning_subtree/random_speech/dog,
|
||||
/datum/ai_planning_subtree/dog,
|
||||
)
|
||||
|
||||
/// Subtree that schedules borgi to randomly shoot if they're emagged.
|
||||
/datum/ai_planning_subtree/emagged_borgi
|
||||
/// Probability that emagged borgi will randomly attack.
|
||||
var/chance = 33
|
||||
/// Range to immediately target enemies
|
||||
var/view_range = 10
|
||||
|
||||
/datum/ai_planning_subtree/emagged_borgi/SelectBehaviors(datum/ai_controller/controller, delta_time)
|
||||
. = ..()
|
||||
|
||||
// Emagged borgi?
|
||||
var/mob/living/basic/pet/dog/corgi/borgi/borgi_pawn = controller.pawn
|
||||
if(!istype(borgi_pawn) || !borgi_pawn.emagged)
|
||||
return
|
||||
|
||||
// Target if not already targetted and prob check passes.
|
||||
var/datum/weakref/weak_target = controller.blackboard[BB_BASIC_MOB_CURRENT_TARGET]
|
||||
var/atom/target = weak_target?.resolve()
|
||||
if(QDELETED(target))
|
||||
if(!DT_PROB(chance, delta_time))
|
||||
return
|
||||
|
||||
controller.queue_behavior(/datum/ai_behavior/find_potential_targets, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETTING_DATUM, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION)
|
||||
return
|
||||
|
||||
// Attack.
|
||||
controller.queue_behavior(/datum/ai_behavior/emagged_borgi_attack, BB_BASIC_MOB_CURRENT_TARGET)
|
||||
return SUBTREE_RETURN_FINISH_PLANNING
|
||||
|
||||
/**
|
||||
* Shoot a random target.
|
||||
*/
|
||||
/datum/ai_behavior/emagged_borgi_attack
|
||||
action_cooldown = 3 SECONDS
|
||||
|
||||
/datum/ai_behavior/emagged_borgi_attack/perform(delta_time, datum/ai_controller/controller, target_key)
|
||||
var/atom/target = controller.blackboard[target_key]
|
||||
if(QDELETED(target))
|
||||
return
|
||||
|
||||
var/mob/living/basic/pet/dog/corgi/borgi/borgi_pawn = controller.pawn
|
||||
if(!istype(borgi_pawn))
|
||||
return
|
||||
|
||||
borgi_pawn.shoot_at(target)
|
||||
|
||||
/mob/living/basic/pet/dog/dobermann
|
||||
name = "\proper Dobermann"
|
||||
gender = MALE
|
||||
desc = "A larger breed of dog."
|
||||
@@ -214,4 +316,3 @@
|
||||
icon_state = "dobber"
|
||||
icon_dead = "dobbydead"
|
||||
icon_living = "dobber"
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Pets
|
||||
/datum/area_spawn/markus
|
||||
target_areas = list(/area/station/cargo/sorting, /area/station/cargo/storage, /area/station/cargo/office, /area/station/command/heads_quarters/qm)
|
||||
desired_atom = /mob/living/simple_animal/pet/dog/markus
|
||||
desired_atom = /mob/living/basic/pet/dog/markus
|
||||
|
||||
/datum/area_spawn/bumbles
|
||||
target_areas = list(/area/station/service/hydroponics, /area/station/service/hydroponics/upper)
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
/datum/area_spawn/borgi
|
||||
target_areas = list(/area/station/science/robotics, /area/station/science/robotics/mechbay, /area/station/science/robotics/lab)
|
||||
desired_atom = /mob/living/simple_animal/pet/dog/corgi/borgi
|
||||
desired_atom = /mob/living/basic/pet/dog/corgi/borgi
|
||||
|
||||
/datum/area_spawn/poppy
|
||||
target_areas = list(/area/station/engineering/main, /area/station/engineering/break_room, /area/station/engineering/lobby, /area/station/engineering/supermatter/room)
|
||||
|
||||
@@ -23,7 +23,8 @@
|
||||
/mob/living/basic/banana_spider/Initialize(mapload)
|
||||
. = ..()
|
||||
AddComponent(/datum/component/slippery, 40)
|
||||
AddElement(/datum/element/death_drops, list(/obj/item/food/deadbanana_spider))
|
||||
var/static/list/banana_drops = list(/obj/item/food/deadbanana_spider)
|
||||
AddElement(/datum/element/death_drops, banana_drops)
|
||||
AddElement(/datum/element/basic_body_temp_sensitive, 270, INFINITY)
|
||||
AddComponent(/datum/component/squashable, squash_chance = 50, squash_damage = 1)
|
||||
|
||||
|
||||
@@ -2,53 +2,68 @@
|
||||
#define RESTING_STATE_SIT 1
|
||||
#define RESTING_STATE_REST 2
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/ian
|
||||
/mob/living/basic/pet/dog/corgi/ian
|
||||
icon = 'modular_skyrat/modules/chadian/icons/ian.dmi'
|
||||
ai_controller = /datum/ai_controller/dog/corgi/chadian
|
||||
|
||||
var/resting_state = 0
|
||||
var/old = FALSE
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/ian/Life(delta_time = SSMOBS_DT, times_fired)
|
||||
if(!stat && SSticker.current_state == GAME_STATE_FINISHED && !memory_saved)
|
||||
Write_Memory(FALSE)
|
||||
memory_saved = TRUE
|
||||
if(!stat && !buckled && !client && !inventory_head && !inventory_back)
|
||||
if(DT_PROB(0.5, delta_time))
|
||||
manual_emote(pick("flops forward laying flat.", "wags [p_their()] tail.", "lies down."))
|
||||
set_rest_state(RESTING_STATE_REST)
|
||||
else if(DT_PROB(0.5, delta_time))
|
||||
manual_emote(pick("sits down.", "crouches on [p_their()] hind legs.", "looks alert."))
|
||||
set_rest_state(RESTING_STATE_SIT)
|
||||
else if(DT_PROB(0.5, delta_time))
|
||||
if (resting_state)
|
||||
manual_emote(pick("gets up and barks.", "walks around.", "stops resting."))
|
||||
set_rest_state(RESTING_STATE_NONE)
|
||||
else
|
||||
manual_emote(pick("grooms [p_their()] fur.", "twitches [p_their()] ears.", "shakes [p_their()] fur."))
|
||||
..()
|
||||
/// AI controller that adds chad ian emotes
|
||||
/datum/ai_controller/dog/corgi/chadian
|
||||
idle_behavior = /datum/idle_behavior/idle_dog/chadian
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/ian/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change = TRUE)
|
||||
/// Actual idle behavior that adds chad ian emotes
|
||||
/datum/idle_behavior/idle_dog/chadian/perform_idle_behavior(delta_time, datum/ai_controller/dog/controller)
|
||||
. = ..()
|
||||
|
||||
var/mob/living/basic/pet/dog/corgi/ian/ian_pawn = controller.pawn
|
||||
|
||||
if(ian_pawn.buckled || ian_pawn.pulledby || ian_pawn.inventory_head || ian_pawn.inventory_back)
|
||||
return
|
||||
|
||||
if(DT_PROB(0.5, delta_time))
|
||||
ian_pawn.manual_emote(pick("flops forward laying flat.", "wags [p_their()] tail.", "lies down."))
|
||||
ian_pawn.set_rest_state(RESTING_STATE_REST)
|
||||
else if(DT_PROB(0.5, delta_time))
|
||||
ian_pawn.manual_emote(pick("sits down.", "crouches on [p_their()] hind legs.", "looks alert."))
|
||||
ian_pawn.set_rest_state(RESTING_STATE_SIT)
|
||||
else if(DT_PROB(0.5, delta_time))
|
||||
if (ian_pawn.resting_state)
|
||||
ian_pawn.manual_emote(pick("gets up and barks.", "walks around.", "stops resting."))
|
||||
ian_pawn.set_rest_state(RESTING_STATE_NONE)
|
||||
else
|
||||
ian_pawn.manual_emote(pick("grooms [p_their()] fur.", "twitches [p_their()] ears.", "shakes [p_their()] fur."))
|
||||
|
||||
/mob/living/basic/pet/dog/corgi/ian/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change = TRUE)
|
||||
. = ..()
|
||||
if(resting_state)
|
||||
manual_emote(pick("gets up and barks.", "walks around.", "stops resting."))
|
||||
set_rest_state(RESTING_STATE_NONE)
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/ian/proc/set_rest_state(state)
|
||||
/mob/living/basic/pet/dog/corgi/ian/proc/set_rest_state(state)
|
||||
resting_state = state
|
||||
update_icons()
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/ian/update_icons()
|
||||
/mob/living/basic/pet/dog/corgi/ian/update_icons()
|
||||
. = ..()
|
||||
if(old && !stat)
|
||||
|
||||
// Dead
|
||||
if(stat)
|
||||
icon_state = "[initial(icon_state)][is_slow ? "_old" : ""][shaved ? "_shaved" : ""]_dead"
|
||||
return
|
||||
|
||||
// Wheelchair
|
||||
if(is_slow)
|
||||
icon_state = "[initial(icon_state)]_old[shaved ? "_shaved" : ""]"
|
||||
else if(!stat)
|
||||
switch(resting_state)
|
||||
if(RESTING_STATE_NONE)
|
||||
icon_state = initial(icon_state)
|
||||
if(RESTING_STATE_SIT)
|
||||
icon_state = "[initial(icon_state)]_sit[shaved ? "_shaved" : ""]"
|
||||
if(RESTING_STATE_REST)
|
||||
icon_state = "[initial(icon_state)]_rest[shaved ? "_shaved" : ""]"
|
||||
else
|
||||
icon_state = icon_dead
|
||||
return
|
||||
|
||||
switch(resting_state)
|
||||
if(RESTING_STATE_NONE)
|
||||
icon_state = initial(icon_state)
|
||||
if(RESTING_STATE_SIT)
|
||||
icon_state = "[initial(icon_state)]_sit[shaved ? "_shaved" : ""]"
|
||||
if(RESTING_STATE_REST)
|
||||
icon_state = "[initial(icon_state)]_rest[shaved ? "_shaved" : ""]"
|
||||
|
||||
#undef RESTING_STATE_NONE
|
||||
#undef RESTING_STATE_SIT
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 17 KiB |
@@ -71,7 +71,7 @@
|
||||
desc = "Gondola is the silent walker. Having no hands he embodies the Taoist principle of wu-wei (non-action) while his smiling facial expression shows his utter and complete acceptance of the world as it is. Its hide is extremely valuable. This one seems a little skinny and attached to the Theater."
|
||||
loot = list(/obj/effect/decal/cleanable/blood/gibs)
|
||||
|
||||
/mob/living/simple_animal/pet/dog/dobermann/walter
|
||||
/mob/living/basic/pet/dog/dobermann/walter
|
||||
name = "Walter"
|
||||
real_name = "Walter"
|
||||
desc = "It's Walter, he bites criminals just as well as he bites toddlers."
|
||||
|
||||
+4
-1
@@ -781,6 +781,8 @@
|
||||
#include "code\datums\ai\_ai_planning_subtree.dm"
|
||||
#include "code\datums\ai\_item_behaviors.dm"
|
||||
#include "code\datums\ai\telegraph_effects.dm"
|
||||
#include "code\datums\ai\babies\babies_behaviors.dm"
|
||||
#include "code\datums\ai\babies\babies_subtrees.dm"
|
||||
#include "code\datums\ai\bane\bane_behaviors.dm"
|
||||
#include "code\datums\ai\bane\bane_controller.dm"
|
||||
#include "code\datums\ai\bane\bane_subtrees.dm"
|
||||
@@ -3676,6 +3678,8 @@
|
||||
#include "code\modules\mob\living\basic\lavaland\bileworm\bileworm_instrument.dm"
|
||||
#include "code\modules\mob\living\basic\lavaland\bileworm\bileworm_loot.dm"
|
||||
#include "code\modules\mob\living\basic\lavaland\bileworm\bileworm_vileworm.dm"
|
||||
#include "code\modules\mob\living\basic\pets\dog.dm"
|
||||
#include "code\modules\mob\living\basic\pets\pet.dm"
|
||||
#include "code\modules\mob\living\basic\ruin_defender\stickman.dm"
|
||||
#include "code\modules\mob\living\basic\vermin\axolotl.dm"
|
||||
#include "code\modules\mob\living\basic\vermin\cockroach.dm"
|
||||
@@ -3847,7 +3851,6 @@
|
||||
#include "code\modules\mob\living\simple_animal\friendly\butterfly.dm"
|
||||
#include "code\modules\mob\living\simple_animal\friendly\cat.dm"
|
||||
#include "code\modules\mob\living\simple_animal\friendly\crab.dm"
|
||||
#include "code\modules\mob\living\simple_animal\friendly\dog.dm"
|
||||
#include "code\modules\mob\living\simple_animal\friendly\farm_animals.dm"
|
||||
#include "code\modules\mob\living\simple_animal\friendly\fox.dm"
|
||||
#include "code\modules\mob\living\simple_animal\friendly\gondola.dm"
|
||||
|
||||
@@ -105,7 +105,7 @@ const SLOTS: Record<
|
||||
image: 'inventory-mask.png',
|
||||
},
|
||||
|
||||
corgi_collar: {
|
||||
pet_collar: {
|
||||
displayName: 'collar',
|
||||
gridSpot: getGridSpotKey([1, 2]),
|
||||
image: 'inventory-collar.png',
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
/mob/living/simple_animal/pet/dog/@SUBTYPES : /mob/living/basic/pet/dog/@SUBTYPES {@OLD}
|
||||
Reference in New Issue
Block a user