From 9248c028b1065706606d274b716d78a23f486865 Mon Sep 17 00:00:00 2001
From: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com>
Date: Fri, 5 Dec 2025 17:16:33 -0500
Subject: [PATCH] [PTBF] Example PR: Kill Station Pet (#30650)
* Pet Assassination
* Antag rolls
* Adjusts weights to equal 1000
* Map deconflict
* Linter
* Update code/game/gamemodes/objective.dm
Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>
Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com>
---------
Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com>
Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>
---
_maps/map_files/stations/boxstation.dmm | 4 +-
_maps/map_files/stations/cerestation.dmm | 54 +++++++-------
_maps/map_files/stations/deltastation.dmm | 8 +--
_maps/map_files/stations/emeraldstation.dmm | 20 ++----
_maps/map_files/stations/metastation.dmm | 6 +-
code/_globalvars/lists/mob_lists.dm | 1 +
code/datums/mind.dm | 6 +-
code/game/gamemodes/objective.dm | 70 ++++++++++++++++++-
.../items/weapons/storage/uplink_kits.dm | 8 +++
.../antagonists/_common/antag_datum.dm | 8 ++-
.../hostile/giant_spider/giant_spider.dm | 1 +
.../living/basic/hostile/gorilla/gorilla.dm | 7 ++
.../mob/living/basic/retaliate/kangaroo.dm | 7 ++
.../living/carbon/alien/special/facehugger.dm | 4 ++
.../mob/living/simple_animal/friendly/cat.dm | 1 +
.../mob/living/simple_animal/friendly/dog.dm | 1 +
.../mob/living/simple_animal/friendly/fox.dm | 4 ++
.../mob/living/simple_animal/parrot.dm | 1 +
18 files changed, 155 insertions(+), 56 deletions(-)
diff --git a/_maps/map_files/stations/boxstation.dmm b/_maps/map_files/stations/boxstation.dmm
index b3ad96fcf52..24b21c761e6 100644
--- a/_maps/map_files/stations/boxstation.dmm
+++ b/_maps/map_files/stations/boxstation.dmm
@@ -26548,9 +26548,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/mob/living/basic/gorilla/cargo_domestic{
- name = "Forklift"
- },
+/mob/living/basic/gorilla/cargo_domestic/forklift,
/turf/simulated/floor/plasteel,
/area/station/supply/office)
"bVK" = (
diff --git a/_maps/map_files/stations/cerestation.dmm b/_maps/map_files/stations/cerestation.dmm
index d3eeb43e902..8a38ef61780 100644
--- a/_maps/map_files/stations/cerestation.dmm
+++ b/_maps/map_files/stations/cerestation.dmm
@@ -52578,13 +52578,6 @@
/obj/machinery/microscope,
/turf/simulated/floor/carpet/grimey,
/area/station/security/detective)
-"kmw" = (
-/obj/machinery/alarm/directional/north,
-/obj/effect/turf_decal/tiles/department/command/side{
- dir = 1
- },
-/turf/simulated/floor/plasteel/dark,
-/area/station/command/office/cmo)
"kmy" = (
/obj/machinery/atmospherics/pipe/simple/visible{
dir = 6
@@ -53839,10 +53832,6 @@
icon_state = "asteroidplating"
},
/area/station/maintenance/asmaint)
-"kzP" = (
-/mob/living/basic/gorilla/cargo_domestic,
-/turf/simulated/floor/plasteel/dark,
-/area/station/supply/office)
"kzU" = (
/obj/machinery/atmospherics/unary/portables_connector,
/obj/machinery/atmospherics/portable/canister/air,
@@ -65021,6 +65010,10 @@
/obj/structure/disposalpipe/segment,
/turf/simulated/floor/plasteel/white,
/area/station/science/hallway)
+"mZp" = (
+/mob/living/basic/gorilla/cargo_domestic/forklift,
+/turf/simulated/floor/plasteel/dark,
+/area/station/supply/office)
"mZA" = (
/obj/machinery/atmospherics/binary/volume_pump/on{
dir = 1;
@@ -69269,6 +69262,14 @@
/obj/effect/turf_decal/tiles/neutral,
/turf/simulated/floor/plasteel,
/area/station/hallway/primary/port/south)
+"nZV" = (
+/obj/machinery/alarm/directional/north,
+/mob/living/basic/kangaroo/darwin,
+/obj/effect/turf_decal/tiles/department/command/side{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel/dark,
+/area/station/command/office/cmo)
"nZX" = (
/obj/machinery/atmospherics/portable/canister/oxygen,
/obj/machinery/atmospherics/unary/portables_connector{
@@ -79293,6 +79294,17 @@
/obj/effect/turf_decal/tiles/department/engineering/side,
/turf/simulated/floor/plasteel,
/area/station/engineering/hardsuitstorage)
+"qmS" = (
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/turf/simulated/floor/plasteel/dark,
+/area/station/command/office/cmo)
"qmT" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
@@ -111038,20 +111050,6 @@
},
/turf/simulated/floor/plasteel/dark,
/area/station/security/brig)
-"xfB" = (
-/mob/living/basic/kangaroo{
- name = "Darwin"
- },
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/turf/simulated/floor/plasteel/dark,
-/area/station/command/office/cmo)
"xfG" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -166436,7 +166434,7 @@ gFg
gFg
pTq
idF
-kmw
+nZV
duz
noD
rIh
@@ -166695,7 +166693,7 @@ swf
idF
wWt
gEG
-xfB
+qmS
oKR
hLn
iNy
@@ -168473,7 +168471,7 @@ uhG
nyh
dKv
clE
-kzP
+mZp
ntW
ntW
oFW
diff --git a/_maps/map_files/stations/deltastation.dmm b/_maps/map_files/stations/deltastation.dmm
index 6e3679a92cc..cbaa7f38ea6 100644
--- a/_maps/map_files/stations/deltastation.dmm
+++ b/_maps/map_files/stations/deltastation.dmm
@@ -12087,12 +12087,10 @@
/area/station/supply/office)
"aWu" = (
/obj/effect/turf_decal/stripes/line,
-/mob/living/basic/gorilla/cargo_domestic{
- name = "Forklift"
- },
/obj/structure/cable{
icon_state = "4-8"
},
+/mob/living/basic/gorilla/cargo_domestic/forklift,
/turf/simulated/floor/plasteel,
/area/station/supply/storage)
"aWv" = (
@@ -96062,9 +96060,6 @@
/turf/simulated/floor/plasteel/dark,
/area/station/security/main)
"xIN" = (
-/mob/living/basic/kangaroo{
- name = "Darwin"
- },
/obj/structure/cable{
icon_state = "4-8"
},
@@ -96074,6 +96069,7 @@
/obj/structure/disposalpipe/segment/corner{
dir = 8
},
+/mob/living/basic/kangaroo/darwin,
/turf/simulated/floor/plasteel/dark,
/area/station/command/office/cmo)
"xJo" = (
diff --git a/_maps/map_files/stations/emeraldstation.dmm b/_maps/map_files/stations/emeraldstation.dmm
index 1fa5b3467b0..4259a29a68e 100644
--- a/_maps/map_files/stations/emeraldstation.dmm
+++ b/_maps/map_files/stations/emeraldstation.dmm
@@ -115649,6 +115649,10 @@
},
/turf/simulated/floor/plasteel,
/area/station/supply/miningdock)
+"xmC" = (
+/mob/living/basic/gorilla/cargo_domestic/forklift,
+/turf/simulated/floor/plasteel,
+/area/station/supply/storage)
"xmH" = (
/obj/structure/table/wood,
/obj/item/storage/secure/briefcase,
@@ -120479,18 +120483,6 @@
},
/turf/simulated/floor/plasteel,
/area/station/supply/storage)
-"ylD" = (
-/mob/living/basic/gorilla/cargo_domestic{
- name = "Forklift"
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/disposalpipe/segment,
-/turf/simulated/floor/plasteel,
-/area/station/supply/storage)
"ylG" = (
/obj/structure/chair/office/dark{
dir = 1
@@ -139447,7 +139439,7 @@ wdE
wsR
iws
ave
-ave
+xmC
ave
giX
nfe
@@ -139960,7 +139952,7 @@ ifs
mLY
ave
cTI
-ylD
+jON
jON
jON
jON
diff --git a/_maps/map_files/stations/metastation.dmm b/_maps/map_files/stations/metastation.dmm
index fdd266bded5..d740d2ecd7c 100644
--- a/_maps/map_files/stations/metastation.dmm
+++ b/_maps/map_files/stations/metastation.dmm
@@ -12805,6 +12805,10 @@
},
/turf/simulated/floor/plasteel,
/area/station/engineering/break_room)
+"bvj" = (
+/mob/living/basic/gorilla/cargo_domestic/forklift,
+/turf/simulated/floor/plasteel,
+/area/station/supply/storage)
"bvk" = (
/obj/effect/spawner/window/reinforced,
/turf/simulated/floor/plating,
@@ -107036,7 +107040,7 @@ qpk
oXH
kdx
aRo
-aRo
+bvj
cKf
aVk
nxW
diff --git a/code/_globalvars/lists/mob_lists.dm b/code/_globalvars/lists/mob_lists.dm
index d55e3db5c14..11d6e7013b5 100644
--- a/code/_globalvars/lists/mob_lists.dm
+++ b/code/_globalvars/lists/mob_lists.dm
@@ -31,6 +31,7 @@ GLOBAL_LIST_EMPTY(bots_list) //List of all bots(beepsky, medibots,etc)
GLOBAL_LIST_EMPTY(roundstart_observer_keys) //List of ckeys who ghosted before the game began.
GLOBAL_LIST_EMPTY(antag_hud_users) // ckeys of users who have enabled ahud at some point during the game
GLOBAL_LIST_EMPTY(crew_list) // list of all crew on manifest, contains name paired with their assignment
+GLOBAL_LIST_EMPTY(station_pets) // List of all station pets.
GLOBAL_LIST_EMPTY(surgeries_list)
GLOBAL_LIST_EMPTY(hear_radio_list) //Mobs that hear the radio even if there's no client
diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index ccd8acc0496..da6b507daeb 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -679,9 +679,8 @@
def_value = "custom"
var/new_obj_type = input("Select objective type:", "Objective type", def_value) as null|anything in list(
- "assassinate", "assassinateonce", "blood", "debrain", "protect", "prevent", "hijack", "escape", "survive", "steal",
+ "assassinate", "assassinateonce", "blood", "debrain", "protect", "prevent", "hijack", "escape", "survive", "steal", "kill pet",
"nuke", "nuclear operations", "absorb", "destroy", "maroon", "identity theft", "download", "incriminate", "infiltrate security", "custom")
-
if(!new_obj_type)
return
@@ -758,6 +757,9 @@
if("nuclear operations")
new_objective = /datum/objective/nuclear
+ if("kill pet")
+ new_objective = /datum/objective/kill_pet
+
if("steal")
if(!istype(objective, /datum/objective/steal))
new_objective = new /datum/objective/steal
diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm
index 665c5154130..54cb48613ef 100644
--- a/code/game/gamemodes/objective.dm
+++ b/code/game/gamemodes/objective.dm
@@ -189,6 +189,47 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
update_explanation_text()
return target
+/datum/objective/proc/give_kit(obj/item/item_path)
+ var/list/datum/mind/objective_owners = get_owners()
+ if(!length(objective_owners))
+ return
+
+ var/obj/item/item_to_give = new item_path
+ var/static/list/slots = list(
+ "backpack" = ITEM_SLOT_IN_BACKPACK,
+ "left pocket" = ITEM_SLOT_LEFT_POCKET,
+ "right pocket" = ITEM_SLOT_RIGHT_POCKET,
+ "left hand" = ITEM_SLOT_LEFT_HAND,
+ "right hand" = ITEM_SLOT_RIGHT_HAND,
+ )
+
+ for(var/datum/mind/kit_receiver_mind as anything in shuffle(objective_owners))
+ var/mob/living/carbon/human/kit_receiver = kit_receiver_mind.current
+ if(!kit_receiver)
+ continue
+ var/where = kit_receiver.equip_in_one_of_slots(item_to_give, slots)
+ if(!where)
+ continue
+
+ to_chat(kit_receiver, "
In your [where] is a box containing items and instructions to help you with your objective.
")
+ for(var/datum/mind/objective_owner as anything in objective_owners)
+ if(kit_receiver_mind == objective_owner || !objective_owner.current)
+ continue
+
+ to_chat(objective_owner.current, "
[kit_receiver] has received a box containing items and instructions to help you with your objective.
")
+
+ return
+
+ qdel(item_to_give)
+
+ for(var/datum/mind/objective_owner as anything in objective_owners)
+ var/mob/living/carbon/human/failed_receiver = objective_owner.current
+ if(!failed_receiver)
+ continue
+
+ to_chat(failed_receiver, "Unfortunately, you weren't able to get an objective kit. This is very bad and you should adminhelp immediately (press F1).")
+ message_admins("[ADMIN_LOOKUPFLW(failed_receiver)] Failed to spawn with their [item_path] objective kit.")
+
/**
* Called when the objective's target goes to cryo.
*/
@@ -830,7 +871,7 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
return TRUE
return FALSE
-/datum/objective/steal/proc/give_kit(obj/item/item_path)
+/datum/objective/steal/give_kit(obj/item/item_path)
var/list/datum/mind/objective_owners = get_owners()
if(!length(objective_owners))
return
@@ -1003,6 +1044,33 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
stolen_count++
return stolen_count >= 5
+/datum/objective/kill_pet
+ name = "Kill Pet"
+ martyr_compatible = TRUE
+ delayed_objective_text = "Your objective is to kill a station pet and humiliate Nanotrasen. You will receive further information in a few minutes."
+ completed = TRUE
+
+/datum/objective/kill_pet/update_explanation_text()
+ if(target)
+ explanation_text = "Destroy Nanotrasen's morale by detonating [target] with C4, and optionally take a picture of [target] before the C4 detonates."
+ else
+ explanation_text = "Free Objective."
+
+/datum/objective/kill_pet/find_target(list/target_blacklist)
+ if(!needs_target)
+ return
+ var/list/possible_targets = GLOB.station_pets - target_blacklist
+ if(length(possible_targets) > 0)
+ target = pick(possible_targets)
+
+ addtimer(CALLBACK(src, PROC_REF(hand_out_equipment)), 5 SECONDS, TIMER_DELETE_ME)
+ SEND_SIGNAL(src, COMSIG_OBJECTIVE_TARGET_FOUND, target)
+ update_explanation_text()
+ return target
+
+/datum/objective/kill_pet/proc/hand_out_equipment()
+ give_kit(/obj/item/storage/box/syndie_kit/pet_assassination_kit)
+
/datum/objective/blood
name = "Drink blood"
needs_target = FALSE
diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm
index 44308c1a80d..a84622ae580 100644
--- a/code/game/objects/items/weapons/storage/uplink_kits.dm
+++ b/code/game/objects/items/weapons/storage/uplink_kits.dm
@@ -296,6 +296,14 @@
for(var/obj/item/item as anything in items)
new item(src)
+/obj/item/storage/box/syndie_kit/pet_assassination_kit
+ desc = "It's just an ordinary box."
+ icon_state = "box"
+
+/obj/item/storage/box/syndie_kit/pet_assassination_kit/populate_contents()
+ new /obj/item/grenade/plastic/c4(src)
+ new /obj/item/grenade/plastic/c4(src)
+
/obj/item/storage/box/syndie_kit/space
name = "Boxed Space Suit and Helmet"
can_hold = list(/obj/item/clothing/suit/space/syndicate/black/red, /obj/item/clothing/head/helmet/space/syndicate/black/red, /obj/item/tank/internals/emergency_oxygen/engi/syndi, /obj/item/clothing/mask/gas/syndicate)
diff --git a/code/modules/antagonists/_common/antag_datum.dm b/code/modules/antagonists/_common/antag_datum.dm
index 1f6bc929c72..0e52e5b2b7b 100644
--- a/code/modules/antagonists/_common/antag_datum.dm
+++ b/code/modules/antagonists/_common/antag_datum.dm
@@ -442,6 +442,7 @@ GLOBAL_LIST_EMPTY(antagonists)
#define MAROON_OBJECTIVE "MAROON"
#define ASS_ONCE_OBJECTIVE "ASS_ONCE"
#define ASS_OBJECTIVE "ASS"
+#define ASS_PET "ASS_PET"
#define INFIL_SEC_OBJECTIVE "INFILTRATE_SEC"
@@ -454,8 +455,9 @@ GLOBAL_LIST_EMPTY(antagonists)
*/
/datum/antagonist/proc/roll_single_human_objective()
var/datum/objective/objective_to_add
+
var/list/static/the_objective_list = list(KILL_OBJECTIVE = 47, THEFT_OBJECTIVE = 42, INCRIMINATE_OBJECTIVE = 5, PROTECT_OBJECTIVE = 6)
- var/list/the_nonstatic_kill_list = list(DEBRAIN_OBJECTIVE = 45, MAROON_OBJECTIVE = 235, ASS_ONCE_OBJECTIVE = 160, ASS_OBJECTIVE = 340, INFIL_SEC_OBJECTIVE = 220)
+ var/list/the_nonstatic_kill_list = list(DEBRAIN_OBJECTIVE = 39, MAROON_OBJECTIVE = 202, ASS_ONCE_OBJECTIVE = 138, ASS_OBJECTIVE = 293, ASS_PET = 138, INFIL_SEC_OBJECTIVE = 190)
// If our org has an objectives list, give one to us if we pass a roll on the org's focus
if(organization && length(organization.objectives) && prob(organization.focus))
@@ -480,6 +482,9 @@ GLOBAL_LIST_EMPTY(antagonists)
if(ASS_ONCE_OBJECTIVE)
objective_to_add = /datum/objective/assassinateonce
+ if(ASS_PET)
+ objective_to_add = /datum/objective/kill_pet
+
if(ASS_OBJECTIVE)
objective_to_add = /datum/objective/assassinate
@@ -523,6 +528,7 @@ GLOBAL_LIST_EMPTY(antagonists)
#undef MAROON_OBJECTIVE
#undef ASS_ONCE_OBJECTIVE
#undef ASS_OBJECTIVE
+#undef ASS_PET
#undef INFIL_SEC_OBJECTIVE
diff --git a/code/modules/mob/living/basic/hostile/giant_spider/giant_spider.dm b/code/modules/mob/living/basic/hostile/giant_spider/giant_spider.dm
index 64c0a471005..58c7122c79e 100644
--- a/code/modules/mob/living/basic/hostile/giant_spider/giant_spider.dm
+++ b/code/modules/mob/living/basic/hostile/giant_spider/giant_spider.dm
@@ -218,5 +218,6 @@
/mob/living/basic/giant_spider/araneus/Initialize(mapload)
. = ..()
+ GLOB.station_pets += src
AddElement(/datum/element/ai_retaliate)
AddElement(/datum/element/pet_bonus, "chitters!")
diff --git a/code/modules/mob/living/basic/hostile/gorilla/gorilla.dm b/code/modules/mob/living/basic/hostile/gorilla/gorilla.dm
index 88c86d2150b..4711075dc74 100644
--- a/code/modules/mob/living/basic/hostile/gorilla/gorilla.dm
+++ b/code/modules/mob/living/basic/hostile/gorilla/gorilla.dm
@@ -232,6 +232,13 @@
. = ..()
. |= access_card.GetAccess()
+/mob/living/basic/gorilla/cargo_domestic/forklift
+ name = "Forklift"
+
+/mob/living/basic/gorilla/cargo_domestic/forklift/Initialize(mapload)
+ . = ..()
+ GLOB.station_pets += src
+
/obj/item/card/id/supply/cargo_gorilla
name = "cargorilla ID"
registered_name = "Cargorilla"
diff --git a/code/modules/mob/living/basic/retaliate/kangaroo.dm b/code/modules/mob/living/basic/retaliate/kangaroo.dm
index ed265ec5848..8687c0a4661 100644
--- a/code/modules/mob/living/basic/retaliate/kangaroo.dm
+++ b/code/modules/mob/living/basic/retaliate/kangaroo.dm
@@ -67,3 +67,10 @@
melee_damage_lower = initial(melee_damage_lower)
melee_damage_upper = initial(melee_damage_upper)
+/mob/living/basic/kangaroo/darwin
+ name = "Darwin"
+ real_name = "Darwin"
+
+/mob/living/basic/kangaroo/darwin/Initialize(mapload)
+ . = ..()
+ GLOB.station_pets += src
diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm
index 751b794ef94..7697e123015 100644
--- a/code/modules/mob/living/carbon/alien/special/facehugger.dm
+++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm
@@ -228,3 +228,7 @@
desc = "The worst she might do is attempt to... couple with your head." //hope we don't get sued over a harmless reference, rite?
sterile = 1
gender = FEMALE
+
+/obj/item/clothing/mask/facehugger/lamarr/Initialize(mapload)
+ . = ..()
+ GLOB.station_pets += src
diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm
index 1cd8a0658e6..3acb51a7d5e 100644
--- a/code/modules/mob/living/simple_animal/friendly/cat.dm
+++ b/code/modules/mob/living/simple_animal/friendly/cat.dm
@@ -48,6 +48,7 @@
/mob/living/simple_animal/pet/cat/runtime/Initialize(mapload)
. = ..()
SSpersistent_data.register(src)
+ GLOB.station_pets += src
/mob/living/simple_animal/pet/cat/runtime/Destroy()
SSpersistent_data.registered_atoms -= src
diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm
index 2e00076bdf8..b2c3e30e063 100644
--- a/code/modules/mob/living/simple_animal/friendly/dog.dm
+++ b/code/modules/mob/living/simple_animal/friendly/dog.dm
@@ -335,6 +335,7 @@
/mob/living/simple_animal/pet/dog/corgi/ian/Initialize(mapload)
. = ..()
SSpersistent_data.register(src)
+ GLOB.station_pets += src
/mob/living/simple_animal/pet/dog/corgi/ian/Destroy()
SSpersistent_data.registered_atoms -= src
diff --git a/code/modules/mob/living/simple_animal/friendly/fox.dm b/code/modules/mob/living/simple_animal/friendly/fox.dm
index 10305fed743..21702143bec 100644
--- a/code/modules/mob/living/simple_animal/friendly/fox.dm
+++ b/code/modules/mob/living/simple_animal/friendly/fox.dm
@@ -22,6 +22,10 @@
unique_pet = TRUE
gold_core_spawnable = NO_SPAWN
+/mob/living/simple_animal/pet/dog/fox/renault/Initialize(mapload)
+ . = ..()
+ GLOB.station_pets += src
+
//Syndi fox
/mob/living/simple_animal/pet/dog/fox/syndifox
name = "Syndifox"
diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm
index a26ec5a2e05..aff1dc8887a 100644
--- a/code/modules/mob/living/simple_animal/parrot.dm
+++ b/code/modules/mob/living/simple_animal/parrot.dm
@@ -743,6 +743,7 @@
/mob/living/simple_animal/parrot/poly/Initialize(mapload)
. = ..()
+ GLOB.station_pets += src
ears = new /obj/item/radio/headset/headset_eng(src)
clean_speak += "Danger! Crystal hyperstructure integrity faltering! Integrity: [rand(75, 99)]%" // Has to be here cause of the `rand()`.