Merge pull request #12206 from Fox-McCloud/refactors-corgis

Refactors Corgis and Other Doggos
This commit is contained in:
variableundefined
2019-09-05 21:17:53 -04:00
committed by GitHub
69 changed files with 1232 additions and 872 deletions
+5 -7
View File
@@ -348,7 +348,7 @@
if("queen") M.change_mob_type( /mob/living/carbon/alien/humanoid/queen/large , null, null, delmob, 1 )
if("sentinel") M.change_mob_type( /mob/living/carbon/alien/humanoid/sentinel , null, null, delmob, 1 )
if("larva") M.change_mob_type( /mob/living/carbon/alien/larva , null, null, delmob, 1 )
if("human")
if("human")
var/posttransformoutfit = usr.client.robust_dress_shop()
var/mob/living/carbon/human/newmob = M.change_mob_type(/mob/living/carbon/human, null, null, delmob, 1)
if(posttransformoutfit && istype(newmob))
@@ -358,8 +358,7 @@
if("robot") M.change_mob_type( /mob/living/silicon/robot , null, null, delmob, 1 )
if("cat") M.change_mob_type( /mob/living/simple_animal/pet/cat , null, null, delmob, 1 )
if("runtime") M.change_mob_type( /mob/living/simple_animal/pet/cat/Runtime , null, null, delmob, 1 )
if("corgi") M.change_mob_type( /mob/living/simple_animal/pet/corgi , null, null, delmob, 1 )
if("ian") M.change_mob_type( /mob/living/simple_animal/pet/corgi/Ian , null, null, delmob, 1 )
if("corgi") M.change_mob_type( /mob/living/simple_animal/pet/dog/corgi , null, null, delmob, 1 )
if("crab") M.change_mob_type( /mob/living/simple_animal/crab , null, null, delmob, 1 )
if("coffee") M.change_mob_type( /mob/living/simple_animal/crab/Coffee , null, null, delmob, 1 )
if("parrot") M.change_mob_type( /mob/living/simple_animal/parrot , null, null, delmob, 1 )
@@ -1514,7 +1513,7 @@
usr.client.cmd_admin_animalize(M)
else if(href_list["incarn_ghost"])
if(!check_rights(R_SPAWN))
if(!check_rights(R_SPAWN))
return
var/mob/dead/observer/G = locateUID(href_list["incarn_ghost"])
@@ -1839,9 +1838,8 @@
P.universal_understand = 1
P.can_collar = 1
P.faction = list("neutral")
var/obj/item/clothing/accessory/petcollar/C = new /obj/item/clothing/accessory/petcollar(P)
P.collar = C
C.equipped(P)
var/obj/item/clothing/accessory/petcollar/C = new
P.add_collar(C)
var/obj/item/card/id/I = H.wear_id
if(I)
var/obj/item/card/id/D = new /obj/item/card/id(C)
+1
View File
@@ -601,6 +601,7 @@ BLIND // can't see anything
strip_delay = 50
put_on_delay = 50
burn_state = FIRE_PROOF
dog_fashion = null
/obj/item/clothing/suit/space
name = "Space suit"
+1 -1
View File
@@ -258,7 +258,7 @@
flash_protect = 1
tint = 1
prescription_upgradable = 1
dog_fashion = /datum/dog_fashion/head
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/eyes.dmi',
"Drask" = 'icons/mob/species/drask/eyes.dmi',
+17
View File
@@ -25,33 +25,39 @@
desc = "A rare Chef's Hat meant for hat collectors!"
icon_state = "chef"
item_state = "chef"
dog_fashion = /datum/dog_fashion/head/chef
/obj/item/clothing/head/collectable/paper
name = "collectable paper hat"
desc = "What looks like an ordinary paper hat, is actually a rare and valuable collector's edition paper hat. Keep away from water, fire and Librarians."
icon_state = "paper"
dog_fashion = /datum/dog_fashion/head
/obj/item/clothing/head/collectable/tophat
name = "collectable top hat"
desc = "A top hat worn by only the most prestigious hat collectors."
icon_state = "tophat"
item_state = "that"
dog_fashion = /datum/dog_fashion/head
/obj/item/clothing/head/collectable/captain
name = "collectable captain's hat"
desc = "A Collectable Hat that'll make you look just like a real comdom!"
icon_state = "captain"
item_state = "caphat"
dog_fashion = /datum/dog_fashion/head/captain
/obj/item/clothing/head/collectable/police
name = "collectable police officer's hat"
desc = "A Collectable Police Officer's Hat. This hat emphasizes that you are THE LAW."
icon_state = "policehelm"
dog_fashion = /datum/dog_fashion/head/warden
/obj/item/clothing/head/collectable/beret
name = "collectable beret"
desc = "A Collectable red Beret. It smells faintly of Garlic."
icon_state = "beret"
dog_fashion = /datum/dog_fashion/head/beret
/obj/item/clothing/head/collectable/welding
name = "collectable welding helmet"
@@ -84,35 +90,46 @@
desc = "You'd make a great Dread Syndie Roberts!"
icon_state = "pirate"
item_state = "pirate"
dog_fashion = /datum/dog_fashion/head/pirate
/obj/item/clothing/head/collectable/kitty
name = "collectable kitty ears"
desc = "The fur feels.....a bit too realistic."
icon_state = "kitty"
item_state = "kitty"
dog_fashion = /datum/dog_fashion/head/kitty
/obj/item/clothing/head/collectable/rabbitears
name = "collectable rabbit ears"
desc = "Not as lucky as the feet!"
icon_state = "bunny"
item_state = "bunny"
dog_fashion = /datum/dog_fashion/head/rabbit
/obj/item/clothing/head/collectable/wizard
name = "collectable wizard's hat"
desc = "NOTE:Any magical powers gained from wearing this hat are purely coincidental."
icon_state = "wizard"
dog_fashion = /datum/dog_fashion/head/blue_wizard
/obj/item/clothing/head/collectable/hardhat
name = "collectable hard hat"
desc = "WARNING! Offers no real protection, or luminosity, but it is damn fancy!"
icon_state = "hardhat0_yellow"
item_state = "hardhat0_yellow"
dog_fashion = /datum/dog_fashion/head
/obj/item/clothing/head/collectable/HoS
name = "collectable HoS hat"
desc = "Now you can beat prisoners, set silly sentences and arrest for no reason too!"
icon_state = "hoscap"
/obj/item/clothing/head/collectable/HoP
name = "collectable HoP hat"
desc = "It's your turn to demand excessive paperwork, signatures, stamps, and hire more clowns! Papers, please!"
icon_state = "hopcap"
dog_fashion = /datum/dog_fashion/head/hop
/obj/item/clothing/head/collectable/thunderdome
name = "collectable Thunderdome helmet"
desc = "Go Red! I mean Green! I mean Red! No Green!"
+6 -3
View File
@@ -11,7 +11,7 @@
flags_inv = 0
actions_types = list(/datum/action/item_action/toggle_helmet_light)
burn_state = FIRE_PROOF
dog_fashion = /datum/dog_fashion/head/hardhat
sprite_sheets = list(
"Grey" = 'icons/mob/species/grey/head.dmi'
)
@@ -55,11 +55,13 @@
icon_state = "hardhat0_orange"
item_state = "hardhat0_orange"
item_color = "orange"
dog_fashion = null
/obj/item/clothing/head/hardhat/red
icon_state = "hardhat0_red"
item_state = "hardhat0_red"
item_color = "red"
dog_fashion = null
name = "firefighter helmet"
flags = STOPSPRESSUREDMAGE
heat_protection = HEAD
@@ -76,12 +78,13 @@
max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT
cold_protection = HEAD
min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
dog_fashion = /datum/dog_fashion/head/hardhat
/obj/item/clothing/head/hardhat/dblue
icon_state = "hardhat0_dblue"
item_state = "hardhat0_dblue"
item_color = "dblue"
dog_fashion = null
/obj/item/clothing/head/hardhat/atmos
icon_state = "hardhat0_atmos"
@@ -95,7 +98,7 @@
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
cold_protection = HEAD
min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
dog_fashion = null
sprite_sheets = list(
"Grey" = 'icons/mob/species/grey/helmet.dmi'
)
+11 -1
View File
@@ -13,7 +13,7 @@
max_heat_protection_temperature = HELMET_MAX_TEMP_PROTECT
strip_delay = 60
burn_state = FIRE_PROOF
dog_fashion = /datum/dog_fashion/head/helmet
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/helmet.dmi',
"Drask" = 'icons/mob/species/drask/helmet.dmi',
@@ -76,6 +76,7 @@
icon_state = "swat"
item_state = "swat-alt"
armor = list(melee = 15, bullet = 40, laser = 10, energy = 10, bomb = 40, bio = 0, rad = 0)
dog_fashion = null
/obj/item/clothing/head/helmet/riot
name = "riot helmet"
@@ -86,6 +87,7 @@
flags_inv = HIDEEARS
flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
strip_delay = 80
dog_fashion = null
/obj/item/clothing/head/helmet/riot/knight
name = "medieval helmet"
@@ -94,6 +96,7 @@
item_state = "knight_green"
flags = BLOCKHAIR
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
dog_fashion = null
/obj/item/clothing/head/helmet/justice
name = "helmet of justice"
@@ -105,6 +108,7 @@
can_toggle = 1
toggle_cooldown = 20
active_sound = 'sound/items/weeoo1.ogg'
dog_fashion = null
/obj/item/clothing/head/helmet/justice/escape
name = "alarm helmet"
@@ -127,6 +131,7 @@
heat_protection = HEAD
max_heat_protection_temperature = SPACE_HELM_MAX_TEMP_PROTECT
strip_delay = 80
dog_fashion = null
/obj/item/clothing/head/helmet/swat/syndicate
name = "blood-red helmet"
@@ -146,6 +151,7 @@
heat_protection = HEAD
max_heat_protection_temperature = SPACE_HELM_MAX_TEMP_PROTECT
strip_delay = 80
dog_fashion = null
/obj/item/clothing/head/helmet/roman
name = "roman helmet"
@@ -155,6 +161,7 @@
icon_state = "roman"
item_state = "roman"
strip_delay = 100
dog_fashion = null
/obj/item/clothing/head/helmet/roman/legionaire
name = "roman legionaire helmet"
@@ -175,6 +182,7 @@
can_toggle = 1
toggle_cooldown = 20
toggle_sound = 'sound/items/zippoclose.ogg'
dog_fashion = null
obj/item/clothing/head/helmet/redtaghelm
name = "red laser tag helmet"
@@ -185,6 +193,7 @@ obj/item/clothing/head/helmet/redtaghelm
armor = list(melee = 15, bullet = 10, laser = 20, energy = 10, bomb = 20, bio = 0, rad = 0)
// Offer about the same protection as a hardhat.
flags_inv = HIDEEARS|HIDEEYES
dog_fashion = null
obj/item/clothing/head/helmet/bluetaghelm
name = "blue laser tag helmet"
@@ -195,6 +204,7 @@ obj/item/clothing/head/helmet/bluetaghelm
armor = list(melee = 15, bullet = 10, laser = 20, energy = 10, bomb = 20, bio = 0, rad = 0)
// Offer about the same protection as a hardhat.
flags_inv = HIDEEARS|HIDEEYES
dog_fashion = null
obj/item/clothing/head/blob
name = "blob hat"
+8
View File
@@ -8,6 +8,7 @@
desc = "The commander in chef's head wear."
strip_delay = 10
put_on_delay = 10
dog_fashion = /datum/dog_fashion/head/chef
//Captain
/obj/item/clothing/head/caphat
@@ -17,12 +18,14 @@
item_state = "caphat"
armor = list(melee = 25, bullet = 15, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0)
strip_delay = 60
dog_fashion = /datum/dog_fashion/head/captain
//Captain: no longer space-worthy
/obj/item/clothing/head/caphat/parade
name = "captain's parade cap"
desc = "Worn only by Captains with an abundance of class."
icon_state = "capcap"
dog_fashion = null
//Head of Personnel
/obj/item/clothing/head/hopcap
@@ -30,6 +33,7 @@
icon_state = "hopcap"
desc = "The symbol of true bureaucratic micromanagement."
armor = list(melee = 25, bullet = 15, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0)
dog_fashion = /datum/dog_fashion/head/hop
//Nanotrasen Representative
/obj/item/clothing/head/ntrep
@@ -75,12 +79,14 @@
icon_state = "detective"
allowed = list(/obj/item/reagent_containers/food/snacks/candy/candy_corn, /obj/item/pen)
armor = list(melee = 25, bullet = 5, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0)
dog_fashion = /datum/dog_fashion/head/detective
//Mime
/obj/item/clothing/head/beret
name = "beret"
desc = "A beret, an artists favorite headwear."
icon_state = "beret"
dog_fashion = /datum/dog_fashion/head/beret
/obj/item/clothing/head/beret/durathread
name = "durathread beret"
@@ -108,6 +114,7 @@
icon_state = "policehelm"
armor = list(melee = 30, bullet = 5, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0)
strip_delay = 60
dog_fashion = /datum/dog_fashion/head/warden
/obj/item/clothing/head/officer
name = "officer's cap"
@@ -123,6 +130,7 @@
icon_state = "beret_officer"
armor = list(melee = 30, bullet = 25, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0)
strip_delay = 60
dog_fashion = null
/obj/item/clothing/head/beret/sec/warden
name = "warden's beret"
+7
View File
@@ -40,6 +40,7 @@
desc = "It's an amish looking hat."
icon_state = "tophat"
item_state = "that"
dog_fashion = /datum/dog_fashion/head
/obj/item/clothing/head/redcoat
name = "redcoat's hat"
@@ -68,6 +69,7 @@
name = "nurse's hat"
desc = "It allows quick identification of trained medical personnel."
icon_state = "nursehat"
dog_fashion = /datum/dog_fashion/head/nurse
/obj/item/clothing/head/syndicatefake
name = "black and red space-helmet replica"
@@ -151,6 +153,7 @@
name = "rabbit ears"
desc = "Wearing these makes you look useless, and only good for your sex appeal."
icon_state = "bunny"
dog_fashion = /datum/dog_fashion/head/rabbit
/obj/item/clothing/head/flatcap
name = "flat cap"
@@ -163,6 +166,7 @@
desc = "Yarr."
icon_state = "pirate"
item_state = "pirate"
dog_fashion = /datum/dog_fashion/head/pirate
/obj/item/clothing/head/hgpiratecap
name = "pirate hat"
@@ -374,12 +378,14 @@
icon_state = "sombrero"
item_state = "sombrero"
desc = "You can practically taste the fiesta."
dog_fashion = /datum/dog_fashion/head/sombrero
/obj/item/clothing/head/sombrero/green
name = "green sombrero"
icon_state = "greensombrero"
item_state = "greensombrero"
desc = "As elegant as a dancing cactus."
dog_fashion = null
/obj/item/clothing/head/sombrero/shamebrero
name = "shamebrero"
@@ -387,6 +393,7 @@
item_state = "shamebrero"
desc = "Once it's on, it never comes off."
flags = NODROP
dog_fashion = null
/obj/item/clothing/head/cone
desc = "This cone is trying to warn you of something!"
+4 -2
View File
@@ -136,7 +136,7 @@
flags_inv = HIDEEARS
cold_protection = HEAD
min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
dog_fashion = /datum/dog_fashion/head/ushanka
sprite_sheets = list(
"Grey" = 'icons/mob/species/grey/head.dmi'
)
@@ -181,6 +181,7 @@
flags_inv = 0
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
brightness_on = 1 //luminosity when on
dog_fashion = /datum/dog_fashion/head/reindeer
/*
@@ -191,6 +192,7 @@
desc = "A pair of kitty ears. Meow!"
icon_state = "kitty"
var/icon/mob
dog_fashion = /datum/dog_fashion/head/kitty
/obj/item/clothing/head/kitty/update_icon(var/mob/living/carbon/human/user)
if(!istype(user)) return
@@ -234,7 +236,7 @@
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
species_disguise = "High-tech robot"
dog_fashion = /datum/dog_fashion/head/cardborg
sprite_sheets = list(
"Grey" = 'icons/mob/species/grey/head.dmi'
)
+13 -1
View File
@@ -6,7 +6,7 @@
item_color = "cargo"
var/flipped = 0
actions_types = list(/datum/action/item_action/flip_cap)
dog_fashion = /datum/dog_fashion/head/cargo_tech
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/head.dmi'
)
@@ -38,30 +38,35 @@
desc = "It's a baseball hat in a tasteless red colour."
icon_state = "redsoft"
item_color = "red"
dog_fashion = null
/obj/item/clothing/head/soft/blue
name = "blue cap"
desc = "It's a baseball hat in a tasteless blue colour."
icon_state = "bluesoft"
item_color = "blue"
dog_fashion = null
/obj/item/clothing/head/soft/green
name = "green cap"
desc = "It's a baseball hat in a tasteless green colour."
icon_state = "greensoft"
item_color = "green"
dog_fashion = null
/obj/item/clothing/head/soft/yellow
name = "yellow cap"
desc = "It's a baseball hat in a tasteless yellow colour."
icon_state = "yellowsoft"
item_color = "yellow"
dog_fashion = null
/obj/item/clothing/head/soft/grey
name = "grey cap"
desc = "It's a baseball hat in a tasteful grey colour."
icon_state = "greysoft"
item_color = "grey"
dog_fashion = null
/obj/item/clothing/head/soft/orange
name = "orange cap"
@@ -74,24 +79,28 @@
desc = "It's a baseball hat in a tasteless white colour."
icon_state = "mimesoft"
item_color = "mime"
dog_fashion = null
/obj/item/clothing/head/soft/purple
name = "purple cap"
desc = "It's a baseball hat in a tasteless purple colour."
icon_state = "purplesoft"
item_color = "purple"
dog_fashion = null
/obj/item/clothing/head/soft/black
name = "black cap"
desc = "It's a baseball hat in a tasteless black colour."
icon_state = "blacksoft"
item_color = "black"
dog_fashion = null
/obj/item/clothing/head/soft/rainbow
name = "rainbow cap"
desc = "It's a baseball hat in a bright rainbow of colors."
icon_state = "rainbowsoft"
item_color = "rainbow"
dog_fashion = null
/obj/item/clothing/head/soft/sec
name = "security cap"
@@ -100,6 +109,7 @@
item_color = "sec"
armor = list(melee = 30, bullet = 25, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0)
strip_delay = 60
dog_fashion = null
/obj/item/clothing/head/soft/sec/corp
name = "corporate security cap"
@@ -112,9 +122,11 @@
desc = "A soft cap worn by marines of the Sol Federation."
icon_state = "solgovsoft"
item_color = "solgov"
dog_fashion = null
/obj/item/clothing/head/soft/solgov/command
name = "Sol Federation Lieutenant's cap"
desc = "A soft cap worn by marines of the Sol Federation. The insignia signifies the wearer bears the rank of a Lieutenant."
icon_state = "solgovcsoft"
item_color = "solgovc"
dog_fashion = null
+1
View File
@@ -108,6 +108,7 @@
item_state = "clown_hat"
flags = BLOCK_GAS_SMOKE_EFFECT | AIRTIGHT | BLOCKHAIR
burn_state = FLAMMABLE
dog_fashion = /datum/dog_fashion/head/clown
/obj/item/clothing/mask/gas/clown_hat/attack_self(mob/user)
@@ -228,6 +228,7 @@
icon_state = "fake-moustache"
flags_inv = HIDEFACE
actions_types = list(/datum/action/item_action/pontificate)
dog_fashion = /datum/dog_fashion/head/not_ian
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/mask.dmi',
@@ -259,6 +260,7 @@
w_class = WEIGHT_CLASS_SMALL
gas_transfer_coefficient = 0.90
/obj/item/clothing/mask/redscarf
name = "red scarf"
desc = "A red and white checkered neck scarf."
@@ -186,6 +186,7 @@
item_state = "eng_hardsuit"
armor = list(melee = 30, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 75)
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/engine
dog_fashion = /datum/dog_fashion/back/hardsuit
//Atmospherics
/obj/item/clothing/head/helmet/space/hardsuit/engine/atmos
@@ -207,6 +208,7 @@
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS //Uncomment to enable firesuit protection
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/engine/atmos
dog_fashion = null
//Chief Engineer's hardsuit
/obj/item/clothing/head/helmet/space/hardsuit/engine/elite
@@ -229,6 +231,7 @@
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/engine/elite
jetpack = /obj/item/tank/jetpack/suit
dog_fashion = null
//Mining hardsuit
/obj/item/clothing/head/helmet/space/hardsuit/mining
@@ -62,6 +62,7 @@
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
unacidable = 1
strip_delay = 130
dog_fashion = /datum/dog_fashion/back/deathsquad
//NEW SWAT suit
/obj/item/clothing/suit/space/swat
@@ -107,6 +108,7 @@
)
flags = BLOCKHAIR | STOPSPRESSUREDMAGE
flags_cover = HEADCOVERSEYES
dog_fashion = /datum/dog_fashion/head/santa
/obj/item/clothing/head/helmet/space/santahat/attack_self(mob/user as mob)
if(src.icon_state == "santahat")
+4
View File
@@ -21,6 +21,7 @@
blood_overlay_type = "armor"
flags_size = ONESIZEFITSALL
armor = list(melee = 25, bullet = 15, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0)
dog_fashion = /datum/dog_fashion/back
/obj/item/clothing/suit/armor/vest/jacket
name = "military jacket"
@@ -148,6 +149,7 @@
heat_protection = UPPER_TORSO|LOWER_TORSO|HANDS
strip_delay = 70
burn_state = FLAMMABLE
dog_fashion = null
/obj/item/clothing/suit/armor/vest/warden/alt
name = "warden's jacket"
@@ -161,6 +163,7 @@
item_state = "armor"
body_parts_covered = UPPER_TORSO|LOWER_TORSO
armor = list(melee = 50, bullet = 40, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
dog_fashion = null
/obj/item/clothing/suit/armor/vest/capcarapace/alt
name = "captain's parade jacket"
@@ -252,6 +255,7 @@
flags_size = ONESIZEFITSALL
allowed = list(/obj/item/tank/emergency_oxygen,/obj/item/reagent_containers/spray/pepper,/obj/item/flashlight,/obj/item/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/restraints/handcuffs,/obj/item/storage/fancy/cigarettes,/obj/item/lighter,/obj/item/detective_scanner,/obj/item/taperecorder)
burn_state = FLAMMABLE
dog_fashion = null
//Reactive armor
/obj/item/clothing/suit/armor/reactive
@@ -174,6 +174,7 @@
item_state = "chickensuit"
body_parts_covered = UPPER_TORSO|ARMS|LOWER_TORSO|LEGS|FEET
flags_inv = HIDESHOES|HIDEJUMPSUIT
dog_fashion = /datum/dog_fashion/back
/obj/item/clothing/suit/corgisuit/super_hero
name = "super-hero corgi suit"
@@ -229,6 +230,7 @@
body_parts_covered = UPPER_TORSO|LOWER_TORSO
flags_inv = HIDEJUMPSUIT
species_disguise = "High-tech robot"
dog_fashion = /datum/dog_fashion/back
/obj/item/clothing/suit/cardborg/equipped(mob/living/user, slot)
..()
+8
View File
@@ -11,16 +11,19 @@
strip_delay = 50
put_on_delay = 50
magical = TRUE
dog_fashion = /datum/dog_fashion/head/blue_wizard
/obj/item/clothing/head/wizard/red
name = "red wizard hat"
desc = "Strange-looking, red, hat-wear that most certainly belongs to a real magic user."
icon_state = "redwizard"
dog_fashion = /datum/dog_fashion/head/red_wizard
/obj/item/clothing/head/wizard/black
name = "black wizard hat"
desc = "Strange-looking black hat-wear that most certainly belongs to a real skeleton. Spooky."
icon_state = "blackwizard"
dog_fashion = null
/obj/item/clothing/head/wizard/clown
@@ -28,6 +31,7 @@
desc = "Strange-looking purple hat-wear that most certainly belongs to a real magic user."
icon_state = "wizhatclown"
item_state = "wizhatclown" // cheating
dog_fashion = null
/obj/item/clothing/head/wizard/fake
name = "wizard hat"
@@ -37,22 +41,26 @@
permeability_coefficient = 1
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
magical = FALSE
dog_fashion = /datum/dog_fashion/head/blue_wizard
/obj/item/clothing/head/wizard/marisa
name = "Witch Hat"
desc = "Strange-looking hat-wear, makes you want to cast fireballs."
icon_state = "marisa"
dog_fashion = null
/obj/item/clothing/head/wizard/magus
name = "Magus Helm"
desc = "A mysterious helmet that hums with an unearthly power"
icon_state = "magus"
item_state = "magus"
dog_fashion = null
/obj/item/clothing/head/wizard/amp
name = "psychic amplifier"
desc = "A crown-of-thorns psychic amplifier. Kind of looks like a tiara having sex with an industrial robot."
icon_state = "amp"
dog_fashion = null
/obj/item/clothing/suit/wizrobe
name = "wizard robe"
@@ -320,6 +320,7 @@
/obj/item/clothing/accessory/scarf // No overlay
name = "scarf"
desc = "A stylish scarf. The perfect winter accessory for those with a keen fashion sense, and those who just can't handle a cold breeze on their necks."
dog_fashion = /datum/dog_fashion/head
/obj/item/clothing/accessory/scarf/red
name = "red scarf"
@@ -678,7 +679,7 @@
/obj/item/clothing/accessory/petcollar/process()
var/mob/living/simple_animal/M = loc
// if it wasn't intentionally unequipped but isn't being worn, possibly gibbed
if(istype(M) && src == M.collar && M.stat != DEAD)
if(istype(M) && src == M.pcollar && M.stat != DEAD)
return
var/area/t = get_area(M)
+14 -11
View File
@@ -238,17 +238,20 @@
force = 2
/obj/item/fluff/dogwhistle/attack_self(mob/user)
user.visible_message("<span class='notice'>[user] blows on the whistle, but no sound comes out.</span>", "<span class='notice'>You blow on the whistle, but don't hear anything.</span>")
spawn(20)
var/mob/living/simple_animal/pet/corgi/C = new /mob/living/simple_animal/pet/corgi(get_turf(user))
var/obj/item/clothing/head/det_hat/D = new /obj/item/clothing/head/det_hat(C)
D.flags |= NODROP
C.inventory_head = D
C.regenerate_icons()
C.name = "Detective Sax"
C.visible_message("<span class='notice'>[C] suddenly winks into existence at [user]'s feet!</span>")
to_chat(user, "<span class='danger'>[src] crumbles to dust in your hands!</span>")
qdel(src)
user.visible_message("<span class='notice'>[user] blows on the whistle, but no sound comes out.</span>", "<span class='notice'>You blow on the whistle, but don't hear anything.</span>")
addtimer(CALLBACK(src, .proc/summon_sax, user), 20)
/obj/item/fluff/dogwhistle/proc/summon_sax(mob/user)
var/mob/living/simple_animal/pet/dog/corgi/C = new /mob/living/simple_animal/pet/dog/corgi(get_turf(user))
C.name = "Detective Sax"
C.real_name = "Detective Sax"
var/obj/item/clothing/head/det_hat/D = new
D.flags |= NODROP
C.place_on_head(D)
C.visible_message("<span class='notice'>[C] suddenly winks into existence at [user]'s feet!</span>")
to_chat(user, "<span class='danger'>[src] crumbles to dust in your hands!</span>")
user.drop_item()
qdel(src)
/obj/item/storage/toolbox/fluff/lunchbox //godoforeos: Jason Conrad
name = "lunchpail"
+12 -16
View File
@@ -153,33 +153,29 @@
/obj/item/reagent_containers/food/snacks/attack_animal(mob/M)
if(isanimal(M))
M.changeNext_move(CLICK_CD_MELEE)
if(iscorgi(M))
var/mob/living/simple_animal/pet/corgi/G = M
if(world.time < (G.last_eaten + 300))
to_chat(G, "<span class='notice'>You are too full to try eating [src] right now.</span>")
if(isdog(M))
var/mob/living/simple_animal/pet/dog/D = M
if(world.time < (D.last_eaten + 300))
to_chat(D, "<span class='notice'>You are too full to try eating [src] right now.</span>")
else if(bitecount >= 4)
M.visible_message("[M] [pick("burps from enjoyment", "yaps for more", "woofs twice", "looks at the area where [src] was")].","<span class='notice'>You swallow up the last part of [src].</span>")
D.visible_message("[D] [pick("burps from enjoyment", "yaps for more", "woofs twice", "looks at the area where [src] was")].","<span class='notice'>You swallow up the last part of [src].</span>")
playsound(loc,'sound/items/eatfood.ogg', rand(10,50), 1)
var/mob/living/simple_animal/pet/corgi/C = M
C.adjustBruteLoss(-5)
C.adjustFireLoss(-5)
D.adjustHealth(-10)
D.last_eaten = world.time
D.taste(reagents)
qdel(src)
G.last_eaten = world.time
G.taste(reagents)
else
M.visible_message("[M] takes a bite of [src].","<span class='notice'>You take a bite of [src].</span>")
D.visible_message("[D] takes a bite of [src].","<span class='notice'>You take a bite of [src].</span>")
playsound(loc,'sound/items/eatfood.ogg', rand(10,50), 1)
bitecount++
G.last_eaten = world.time
G.taste(reagents)
D.last_eaten = world.time
D.taste(reagents)
else if(ismouse(M))
var/mob/living/simple_animal/mouse/N = M
to_chat(N, text("<span class='notice'>You nibble away at [src].</span>"))
if(prob(50))
N.visible_message("[N] nibbles away at [src].", "")
//N.emote("nibbles away at the [src]")
N.adjustBruteLoss(-1)
N.adjustFireLoss(-1)
N.adjustHealth(-2)
N.taste(reagents)
/obj/item/reagent_containers/food/snacks/sliceable/examine(mob/user)
+2 -2
View File
@@ -4,8 +4,8 @@
for(var/turf/simulated/floor/T in orange(1,xmas))
for(var/i=1,i<=rand(1,5),i++)
new /obj/item/a_gift(T)
for(var/mob/living/simple_animal/pet/corgi/Ian/Ian in GLOB.mob_list)
Ian.place_on_head(new /obj/item/clothing/head/helmet/space/santahat(Ian))
for(var/mob/living/simple_animal/pet/dog/corgi/Ian/Ian in GLOB.mob_list)
Ian.place_on_head(new /obj/item/clothing/head/helmet/space/santahat)
for(var/datum/crafting_recipe/snowman/S in GLOB.crafting_recipes)
S.always_availible = TRUE
break
-6
View File
@@ -58,12 +58,6 @@
var/mob/living/simple_animal/P = new O.type(O.loc)
P.real_name = O.real_name
P.name = O.name
if(iscorgi(O))
var/mob/living/simple_animal/pet/corgi/C = O
if(C.inventory_head)
C.inventory_head.loc = C.loc
if(C.inventory_back)
C.inventory_back.loc = C.loc
if(O.mind)
O.mind.transfer_to(P)
else
@@ -152,14 +152,6 @@ var/const/MAX_ACTIVE_TIME = 400
target.equip_to_slot(src, slot_wear_mask,,0)
if(!sterile)
M.Paralyse(MAX_IMPREGNATION_TIME/6) //something like 25 ticks = 20 seconds with the default settings
else if(iscorgi(M))
var/mob/living/simple_animal/pet/corgi/C = M
if(C.facehugger)
var/obj/item/F = C.facehugger
F.forceMove(C.loc)
forceMove(C)
C.facehugger = src
C.regenerate_icons()
GoIdle() //so it doesn't jump the people that tear it off
@@ -192,11 +184,6 @@ var/const/MAX_ACTIVE_TIME = 400
if(!target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo))
new /obj/item/organ/internal/body_egg/alien_embryo(target)
if(iscorgi(target))
var/mob/living/simple_animal/pet/corgi/C = target
src.loc = get_turf(C)
C.facehugger = null
else
target.visible_message("<span class='danger'>[src] violates [target]'s face!</span>", \
"<span class='userdanger'>[src] violates [target]'s face!</span>")
@@ -1,15 +1,6 @@
/mob/living/simple_animal/attackby(obj/item/O, mob/living/user)
if(can_collar && !collar && istype(O, /obj/item/clothing/accessory/petcollar))
var/obj/item/clothing/accessory/petcollar/C = O
if(user.drop_item())
C.forceMove(src)
collar = C
collar.equipped(src)
regenerate_icons()
to_chat(usr, "<span class='notice'>You put \the [C] around \the [src]'s neck.</span>")
if(C.tagname)
name = C.tagname
real_name = C.tagname
if(can_collar && istype(O, /obj/item/clothing/accessory/petcollar) && !pcollar)
add_collar(O, user)
return
else
return ..()
@@ -23,7 +23,7 @@
response_disarm = "gently pushes aside"
response_harm = "kicks"
gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
collar_type = "cat"
var/turns_since_scan = 0
var/mob/living/simple_animal/mouse/movement_target
var/eats_mice = 1
@@ -38,6 +38,7 @@
icon_resting = "cat_rest"
gender = FEMALE
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
unique_pet = TRUE
var/list/family = list()
var/memory_saved = 0
var/list/children = list() //Actual mob instances of children
@@ -107,6 +108,7 @@
else if(prob(1))
custom_emote(1, pick("sits down.", "crouches on its hind legs.", "looks alert."))
icon_state = "[icon_living]_sit"
collar_type = "[initial(collar_type)]_sit"
resting = TRUE
update_canmove()
else if(prob(1))
@@ -188,6 +190,7 @@
/mob/living/simple_animal/pet/cat/Proc
name = "Proc"
unique_pet = TRUE
/mob/living/simple_animal/pet/cat/kitten
name = "kitten"
@@ -199,6 +202,7 @@
gender = NEUTER
density = 0
pass_flags = PASSMOB
collar_type = "kitten"
/mob/living/simple_animal/pet/cat/Syndi
name = "SyndiCat"
@@ -1,669 +0,0 @@
//Corgi
/mob/living/simple_animal/pet/corgi
name = "\improper corgi"
real_name = "corgi"
desc = "It's a corgi."
icon_state = "corgi"
icon_living = "corgi"
icon_dead = "corgi_dead"
gender = NEUTER
health = 30
maxHealth = 30
speak = list("YAP", "Woof!", "Bark!", "AUUUUUU")
speak_emote = list("barks", "woofs")
emote_hear = list("barks", "woofs", "yaps","pants")
emote_see = list("shakes its head", "shivers")
var/bark_sound = list('sound/creatures/dog_bark1.ogg','sound/creatures/dog_bark2.ogg') //Used in emote.
var/yelp_sound = 'sound/creatures/dog_yelp.ogg' //Used on death.
speak_chance = 1
turns_per_move = 10
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/corgi = 3)
response_help = "pets"
response_disarm = "bops"
response_harm = "kicks"
see_in_dark = 5
childtype = list(/mob/living/simple_animal/pet/corgi)
animal_species = /mob/living/simple_animal/pet/corgi
gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
var/shaved = 0
var/obj/item/inventory_head
var/obj/item/inventory_back
var/facehugger
var/default_atmos_requirements = 0
var/last_eaten = 0
/mob/living/simple_animal/pet/corgi/New()
..()
default_atmos_requirements = src.atmos_requirements
regenerate_icons()
if(gender == NEUTER)
gender = pick(MALE, FEMALE)
/mob/living/simple_animal/pet/corgi/Life(seconds, times_fired)
. = ..()
regenerate_icons()
/mob/living/simple_animal/pet/corgi/show_inv(mob/user as mob)
user.set_machine(src)
if(user.stat) return
var/dat = {"<table>"}
dat += "<tr><td><B>Head:</B></td><td><A href='?src=[UID()];[inventory_head?"remove_inv":"add_inv"]=head'>[(inventory_head && !(inventory_head.flags&ABSTRACT)) ? inventory_head : "<font color=grey>Empty</font>"]</A></td></tr>"
dat += "<tr><td><B>Back:</B></td><td><A href='?src=[UID()];[inventory_back?"remove_inv":"add_inv"]=back'>[(inventory_back && !(inventory_back.flags&ABSTRACT)) ? inventory_back : "<font color=grey>Empty</font>"]</A></td></tr>"
if(can_collar)
dat += "<tr><td>&nbsp;</td></tr>"
dat += "<tr><td><B>Collar:</B></td><td><A href='?src=[UID()];item=[slot_collar]'>[(collar && !(collar.flags&ABSTRACT)) ? collar : "<font color=grey>Empty</font>"]</A></td></tr>"
if(facehugger)
dat += "<tr><td><B>Facehugger:</B></td><td><A href='?src=[UID()];remove_hugger=1'>[facehugger]</A></td></tr>"
dat += {"</table>
<A href='?src=[user.UID()];mach_close=mob\ref[src]'>Close</A>
"}
var/datum/browser/popup = new(user, "mob\ref[src]", "[src]", 440, 500)
popup.set_content(dat)
popup.open()
/mob/living/simple_animal/pet/corgi/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
if(inventory_head && inventory_back)
//helmet and armor = 100% protection
if( istype(inventory_head,/obj/item/clothing/head/helmet) && istype(inventory_back,/obj/item/clothing/suit/armor) )
if( O.force )
to_chat(user, "<span class='warning'>[src] is wearing too much armor! You can't cause [p_them()] any damage.</span>")
visible_message("<span class='danger'> [user] hits [src] with [O], however [src] is too armored.</span>")
else
to_chat(user, "<span class='warning'>[src] is wearing too much armor! You can't reach [p_their()] skin.</span>")
visible_message("[user] gently taps [src] with [O].")
if(health>0 && prob(15))
custom_emote(1, "looks at [user] with [pick("an amused","an annoyed","a confused","a resentful", "a happy", "an excited")] expression.")
return
if(istype(O, /obj/item/razor))
if(shaved)
to_chat(user, "<span class='warning'>You can't shave this corgi, it's already been shaved!</span>")
return
user.visible_message("[user] starts to shave [src] using \the [O].", "<span class='notice'>You start to shave [src] using \the [O]...</span>")
if(do_after(user, 50 * O.toolspeed, target = src))
user.visible_message("[user] shaves [src]'s hair using \the [O].")
playsound(loc, O.usesound, 20, 1)
shaved = 1
icon_living = "[initial(icon_living)]_shaved"
icon_dead = "[initial(icon_living)]_shaved_dead"
if(stat == CONSCIOUS)
icon_state = icon_living
else
icon_state = icon_dead
return
..()
/mob/living/simple_animal/pet/corgi/Topic(href, href_list)
if(usr.stat) return
if((!ishuman(usr) && !isrobot(usr)) || !Adjacent(usr))
return
//Removing from inventory
if(href_list["remove_inv"])
var/remove_from = href_list["remove_inv"]
switch(remove_from)
if("head")
if(inventory_head)
if(inventory_head.flags & NODROP)
to_chat(usr, "<span class='warning'>\The [inventory_head] is stuck too hard to [src] for you to remove!</span>")
return
name = real_name
desc = initial(desc)
speak = list("YAP", "Woof!", "Bark!", "AUUUUUU")
speak_emote = list("barks", "woofs")
emote_hear = list("barks", "woofs", "yaps","pants")
emote_see = list("shakes its head", "shivers")
desc = "It's a corgi."
set_light(0)
mutations.Remove(BREATHLESS)
atmos_requirements = default_atmos_requirements
minbodytemp = initial(minbodytemp)
inventory_head.loc = src.loc
inventory_head = null
regenerate_icons()
else
to_chat(usr, "<span class='danger'>There is nothing to remove from its [remove_from].</span>")
return
if("back")
if(inventory_back)
if(inventory_back.flags & NODROP)
to_chat(usr, "<span class='warning'>\The [inventory_back] is stuck too hard to [src] for you to remove!</span>")
return
inventory_back.loc = src.loc
inventory_back = null
regenerate_icons()
else
to_chat(usr, "<span class='danger'>There is nothing to remove from its [remove_from].</span>")
return
show_inv(usr)
//Adding things to inventory
else if(href_list["add_inv"])
var/add_to = href_list["add_inv"]
switch(add_to)
if("head")
place_on_head(usr.get_active_hand(),usr)
if("back")
if(inventory_back)
to_chat(usr, "<span class='warning'>It's already wearing something!</span>")
return
else
var/obj/item/item_to_add = usr.get_active_hand()
if(!item_to_add)
usr.visible_message("[usr] pets [src].","<span class='notice'>You rest your hand on [src]'s back for a moment.</span>")
return
if(istype(item_to_add,/obj/item/grenade/plastic/c4)) // last thing he ever wears, I guess
item_to_add.afterattack(src,usr,1)
return
//The objects that corgis can wear on their backs.
var/list/allowed_types = list(
/obj/item/clothing/suit/armor/vest,
/obj/item/clothing/suit/armor/vest/blueshield,
/obj/item/clothing/suit/space/deathsquad,
/obj/item/clothing/suit/space/hardsuit/engine,
/obj/item/radio,
/obj/item/radio/off,
/obj/item/clothing/suit/cardborg,
/obj/item/tank/oxygen,
/obj/item/tank/air,
/obj/item/extinguisher,
)
if( ! ( item_to_add.type in allowed_types ) )
to_chat(usr, "<span class='warning'>You set [item_to_add] on [src]'s back, but [p_they()] shake[p_s()] it off!</span>")
if(!usr.drop_item())
to_chat(usr, "<span class='warning'>\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s back!</span>")
return
item_to_add.loc = loc
if(prob(25))
step_rand(item_to_add)
for(var/i in list(1,2,4,8,4,8,4,dir))
dir = i
sleep(1)
return
usr.drop_item()
item_to_add.loc = src
src.inventory_back = item_to_add
regenerate_icons()
show_inv(usr)
//Removing facehuggers
else if(href_list["remove_hugger"])
if(!facehugger)
return
var/obj/item/F = facehugger
F.forceMove(loc)
facehugger = null
to_chat(usr, "<span class='notice'>You remove [F] from [src]'s face. [src] pants for air and barks.</span>")
regenerate_icons()
show_inv(usr)
else
..()
//Corgis are supposed to be simpler, so only a select few objects can actually be put
//to be compatible with them. The objects are below.
//Many hats added, Some will probably be removed, just want to see which ones are popular.
/mob/living/simple_animal/pet/corgi/proc/place_on_head(obj/item/item_to_add, var/mob/user as mob)
if(istype(item_to_add,/obj/item/grenade/plastic/c4)) // last thing he ever wears, I guess
item_to_add.afterattack(src,user,1)
return
if(inventory_head)
if(user)
to_chat(user, "<span class='warning'>You can't put more than one hat on [src]!</span>")
return
if(!item_to_add)
user.visible_message("[user] pets [src].","<span class='notice'>You rest your hand on [src]'s head for a moment.</span>")
return
var/valid = 0
//Various hats and items (worn on his head) change Ian's behaviour. His attributes are reset when a hat is removed.
if(istype(item_to_add, /obj/item/clothing/accessory/scarf))
valid = 1
else
switch(item_to_add.type)
if( /obj/item/clothing/glasses/sunglasses, /obj/item/clothing/head/that, /obj/item/clothing/head/collectable/paper,
/obj/item/clothing/head/hardhat, /obj/item/clothing/head/collectable/hardhat, /obj/item/clothing/head/hardhat/white,
/obj/item/paper)
valid = 1
if(/obj/item/clothing/head/helmet)
name = "Sergeant [real_name]"
desc = "The ever-loyal, the ever-vigilant."
valid = 1
if(/obj/item/clothing/head/chefhat, /obj/item/clothing/head/collectable/chef)
name = "Sous chef [real_name]"
desc = "Your food will be taste-tested. All of it."
valid = 1
if(/obj/item/clothing/head/caphat, /obj/item/clothing/head/collectable/captain)
name = "Captain [real_name]"
desc = "Probably better than the last captain."
valid = 1
if(/obj/item/clothing/head/kitty, /obj/item/clothing/head/collectable/kitty)
name = "Runtime"
emote_see = list("coughs up a furball", "stretches")
emote_hear = list("purrs")
speak = list("Purrr", "Meow!", "MAOOOOOW!", "HISSSSS", "MEEEEEEW")
desc = "It's a cute little kitty-cat! ... wait ... what the hell?"
valid = 1
if(/obj/item/clothing/head/rabbitears, /obj/item/clothing/head/collectable/rabbitears)
name = "Hoppy"
emote_see = list("twitches its nose", "hops around a bit")
desc = "This is Hoppy. It's a corgi-...urmm... bunny rabbit"
valid = 1
if(/obj/item/clothing/head/beret, /obj/item/clothing/head/collectable/beret)
name = "Yann"
desc = "Mon dieu! C'est un chien!"
speak = list("le woof!", "le bark!", "JAPPE!!")
emote_see = list("cowers in fear.", "surrenders.", "plays dead.","looks as though there is a wall in front of him.")
valid = 1
if(/obj/item/clothing/head/det_hat)
name = "Detective [real_name]"
desc = "[name] sees through your lies..."
emote_see = list("investigates the area.","sniffs around for clues.","searches for scooby snacks.")
valid = 1
if(/obj/item/clothing/head/nursehat)
name = "Nurse [real_name]"
desc = "[name] needs 100cc of beef jerky... STAT!"
valid = 1
if(/obj/item/clothing/head/pirate, /obj/item/clothing/head/collectable/pirate)
name = "[pick("Ol'","Scurvy","Black","Rum","Gammy","Bloody","Gangrene","Death","Long-John")] [pick("kibble","leg","beard","tooth","poop-deck","Threepwood","Le Chuck","corsair","Silver","Crusoe")]"
desc = "Yaarghh!! Thar' be a scurvy dog!"
emote_see = list("hunts for treasure.","stares coldly...","gnashes his tiny corgi teeth!")
emote_hear = list("growls ferociously!", "snarls.")
speak = list("Arrrrgh!!","Grrrrrr!")
valid = 1
if(/obj/item/clothing/head/ushanka)
name = "[pick("Comrade","Commissar","Glorious Leader")] [real_name]"
desc = "A follower of Karl Barx."
emote_see = list("contemplates the failings of the capitalist economic model.", "ponders the pros and cons of vanguardism.")
valid = 1
if(/obj/item/clothing/head/warden, /obj/item/clothing/head/collectable/police)
name = "Officer [real_name]"
emote_see = list("drools.","looks for donuts.")
desc = "Stop right there criminal scum!"
valid = 1
if(/obj/item/clothing/head/wizard/fake, /obj/item/clothing/head/wizard, /obj/item/clothing/head/collectable/wizard)
name = "Grandwizard [real_name]"
speak = list("YAP", "Woof!", "Bark!", "AUUUUUU", "EI NATH!")
valid = 1
if(/obj/item/clothing/head/cardborg)
name = "Borgi"
speak = list("Ping!","Beep!","Woof!")
emote_see = list("goes rogue.", "sniffs out non-humans.")
desc = "Result of robotics budget cuts."
valid = 1
if(/obj/item/bedsheet)
name = "\improper Ghost"
speak = list("WoooOOOooo~","AUUUUUUUUUUUUUUUUUU")
emote_see = list("stumbles around.", "shivers.")
emote_hear = list("howls!","groans.")
desc = "Spooky!"
valid = 1
if(/obj/item/clothing/head/helmet/space/santahat)
name = "Santa's Corgi Helper"
emote_hear = list("barks Christmas songs.", "yaps merrily!")
emote_see = list("looks for presents.", "checks his list.")
desc = "He's very fond of milk and cookies."
valid = 1
if(/obj/item/clothing/head/soft)
name = "Corgi Tech [real_name]"
desc = "The reason your yellow gloves have chew-marks."
valid = 1
if(/obj/item/clothing/head/hardhat/reindeer)
name = "[real_name] the red-nosed Corgi"
emote_hear = list("lights the way!", "illuminates.", "yaps!")
desc = "He has a very shiny nose."
set_light(1)
valid = 1
if(/obj/item/clothing/head/sombrero)
name = "Segnor [real_name]"
desc = "You must respect elder [real_name]"
valid = 1
if(/obj/item/clothing/head/hopcap)
name = "Lieutenant [real_name]"
desc = "Can actually be trusted to not run off on his own."
valid = 1
if(/obj/item/clothing/head/helmet/space/deathsquad)
name = "Trooper [real_name]"
desc = "That's not red paint. That's real corgi blood."
valid = 1
if(/obj/item/clothing/suit/space/hardsuit/engine)
name = "Space Explorer [real_name]"
desc = "That's one small step for a corgi. One giant yap for corgikind."
valid = 1
mutations.Add(BREATHLESS)
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
if(/obj/item/clothing/mask/fakemoustache)
name = "Definitely Not [real_name]"
desc = "That's Definitely Not [real_name]"
valid = 1
if(/obj/item/clothing/head/beret/centcom/officer, /obj/item/clothing/head/beret/centcom/officer/navy)
name = "Blueshield [real_name]"
desc = "Will stand by you until the bitter end."
emote_see = list("stands with pride.", "growls heroically.")
valid = 1
if(valid)
if(user && !user.drop_item())
to_chat(user, "<span class='warning'>\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s head!</span>")
return 0
if(health <= 0)
to_chat(user, "<span class ='notice'>There is merely a dull, lifeless look in [real_name]'s eyes as you put the [item_to_add] on [p_them()].</span>")
else if(user)
user.visible_message("[user] puts [item_to_add] on [real_name]'s head. [src] looks at [user] and barks once.",
"<span class='notice'>You put [item_to_add] on [real_name]'s head. [src] gives you a peculiar look, then wags [p_their()] tail once and barks.</span>",
"<span class='italics'>You hear a friendly-sounding bark.</span>")
item_to_add.loc = src
src.inventory_head = item_to_add
regenerate_icons()
else
if(user && !user.drop_item())
to_chat(user, "<span class='warning'>\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s head!</span>")
return 0
to_chat(user, "<span class='warning'>You set [item_to_add] on [src]'s head, but [p_they()] shake[p_s()] it off!</span>")
item_to_add.loc = loc
if(prob(25))
step_rand(item_to_add)
for(var/i in list(1,2,4,8,4,8,4,dir))
dir = i
sleep(1)
return valid
/mob/living/simple_animal/pet/corgi/death(gibbed)
playsound(src, yelp_sound, 75, 1)
..()
/mob/living/simple_animal/pet/corgi/emote(act, m_type = 1, message = null, force)
if(stat != CONSCIOUS)
return
var/on_CD = 0
act = lowertext(act)
switch(act)
if("bark")
on_CD = handle_emote_CD()
if("growl")
on_CD = handle_emote_CD()
else
on_CD = 0
if(!force && on_CD == 1)
return
switch(act)
if("bark")
message = "<B>[src]</B> [pick(src.speak_emote)]!"
m_type = 2 //audible
playsound(src, pick(src.bark_sound), 50, 0.85)
if("growl")
message = "<B>[src]</B> growls!"
m_type = 2 //audible
if("help")
to_chat(src, "scream, bark, growl")
..()
//IAN! SQUEEEEEEEEE~
/mob/living/simple_animal/pet/corgi/Ian
name = "Ian"
real_name = "Ian" //Intended to hold the name without altering it.
gender = MALE
desc = "It's a corgi."
var/turns_since_scan = 0
var/obj/movement_target
response_help = "pets"
response_disarm = "bops"
response_harm = "kicks"
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
/mob/living/simple_animal/pet/corgi/Ian/handle_automated_movement()
. = ..()
//Feeding, chasing food, FOOOOODDDD
if(!resting && !buckled)
turns_since_scan++
if(turns_since_scan > 5)
turns_since_scan = 0
if((movement_target) && !(isturf(movement_target.loc) || ishuman(movement_target.loc) ))
movement_target = null
stop_automated_movement = 0
if( !movement_target || !(movement_target.loc in oview(src, 3)) )
movement_target = null
stop_automated_movement = 0
for(var/obj/item/reagent_containers/food/snacks/S in oview(src,3))
if(isturf(S.loc) || ishuman(S.loc))
movement_target = S
break
if(movement_target)
spawn(0)
stop_automated_movement = 1
step_to(src,movement_target,1)
sleep(3)
step_to(src,movement_target,1)
sleep(3)
step_to(src,movement_target,1)
if(movement_target) //Not redundant due to sleeps, Item can be gone in 6 decisecomds
if(movement_target.loc.x < src.x)
dir = WEST
else if(movement_target.loc.x > src.x)
dir = EAST
else if(movement_target.loc.y < src.y)
dir = SOUTH
else if(movement_target.loc.y > src.y)
dir = NORTH
else
dir = SOUTH
if(!Adjacent(movement_target)) //can't reach food through windows.
return
if(isturf(movement_target.loc) )
movement_target.attack_animal(src)
else if(ishuman(movement_target.loc) )
if(prob(20))
custom_emote(1, "stares at [movement_target.loc]'s [movement_target] with a sad puppy-face")
if(prob(1))
custom_emote(1, pick("dances around.","chases its tail!"))
spin(20, 1)
/obj/item/reagent_containers/food/snacks/meat/corgi
name = "Corgi meat"
desc = "Tastes like... well you know..."
/mob/living/simple_animal/pet/corgi/regenerate_icons()
overlays.Cut()
if(inventory_head)
var/image/head_icon
if(health <= 0)
head_icon = image('icons/mob/corgi_head.dmi', icon_state = inventory_head.icon_state, dir = EAST)
head_icon.pixel_y = -8
head_icon.transform = turn(head_icon.transform, 180)
else
head_icon = image('icons/mob/corgi_head.dmi', icon_state = inventory_head.icon_state)
overlays += head_icon
if(inventory_back)
var/image/back_icon
if(health <= 0)
back_icon = image('icons/mob/corgi_back.dmi', icon_state = inventory_back.icon_state, dir = EAST)
back_icon.pixel_y = -11
back_icon.transform = turn(back_icon.transform, 180)
else
back_icon = image('icons/mob/corgi_back.dmi', icon_state = inventory_back.icon_state)
overlays += back_icon
if(facehugger)
if(istype(src, /mob/living/simple_animal/pet/corgi/puppy))
overlays += image('icons/mob/mask.dmi',"facehugger_corgipuppy")
else
overlays += image('icons/mob/mask.dmi',"facehugger_corgi")
..(0)
/mob/living/simple_animal/pet/corgi/puppy
name = "\improper corgi puppy"
real_name = "corgi"
desc = "It's a corgi puppy."
icon_state = "puppy"
icon_living = "puppy"
icon_dead = "puppy_dead"
shaved = 0
density = 0
pass_flags = PASSMOB
mob_size = MOB_SIZE_SMALL
//puppies cannot wear anything.
/mob/living/simple_animal/pet/corgi/puppy/Topic(href, href_list)
if(href_list["remove_inv"] || href_list["add_inv"])
to_chat(usr, "<span class='warning'>You can't fit this on [src]!</span>")
return
..()
//LISA! SQUEEEEEEEEE~
/mob/living/simple_animal/pet/corgi/Lisa
name = "Lisa"
real_name = "Lisa"
gender = FEMALE
desc = "It's a corgi with a cute pink bow."
icon_state = "lisa"
icon_living = "lisa"
icon_dead = "lisa_dead"
response_help = "pets"
response_disarm = "bops"
response_harm = "kicks"
var/turns_since_scan = 0
var/puppies = 0
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
//Lisa already has a cute bow!
/mob/living/simple_animal/pet/corgi/Lisa/Topic(href, href_list)
if(href_list["remove_inv"] || href_list["add_inv"])
to_chat(usr, "<span class='warning'>[src] already has a cute bow!</span>")
return
..()
/mob/living/simple_animal/pet/corgi/Lisa/Life()
..()
make_babies()
/mob/living/simple_animal/pet/corgi/Lisa/handle_automated_movement()
. = ..()
if(!resting && !buckled)
if(prob(1))
custom_emote(1, pick("dances around.","chases her tail."))
spin(20, 1)
/mob/living/simple_animal/pet/corgi/attack_hand(mob/living/carbon/human/M)
. = ..()
switch(M.a_intent)
if(INTENT_HELP) wuv(1,M)
if(INTENT_HARM) wuv(-1,M)
/mob/living/simple_animal/pet/corgi/proc/wuv(change, mob/M)
if(change)
if(change > 0)
if(M && stat != DEAD) // Added check to see if this mob (the corgi) is dead to fix issue 2454
new /obj/effect/temp_visual/heart(loc)
custom_emote(1, "yaps happily!")
else
if(M && stat != DEAD) // Same check here, even though emote checks it as well (poor form to check it only in the help case)
custom_emote(1, "growls!")
/mob/living/simple_animal/pet/corgi/Ian/borgi
name = "E-N"
real_name = "E-N" //Intended to hold the name without altering it.
desc = "It's a borgi."
icon_state = "borgi"
icon_living = "borgi"
bark_sound = null //No robo-bjork...
yelp_sound = null //Or robo-Yelp.
var/emagged = 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/blood/gibs/robot)
del_on_death = 1
deathmessage = "blows apart!"
/mob/living/simple_animal/pet/corgi/Ian/borgi/emag_act(user as mob)
if(!emagged)
emagged = 1
visible_message("<span class='warning'>[user] swipes a card through [src].</span>", "<span class='notice'>You overload [src]s internal reactor.</span>")
spawn (1000)
src.explode()
/mob/living/simple_animal/pet/corgi/Ian/borgi/proc/explode()
for(var/mob/M in viewers(src, null))
if(M.client)
M.show_message("<span class='warning'>[src] makes an odd whining noise.</span>")
sleep(10)
explosion(get_turf(src), 0, 1, 4, 7)
death()
/mob/living/simple_animal/pet/corgi/Ian/borgi/proc/shootAt(var/atom/movable/target)
var/turf/T = get_turf(src)
var/turf/U = get_turf(target)
if(!T || !U)
return
var/obj/item/projectile/beam/A = new /obj/item/projectile/beam(loc)
A.icon = 'icons/effects/genetics.dmi'
A.icon_state = "eyelasers"
playsound(src.loc, 'sound/weapons/taser2.ogg', 75, 1)
A.current = T
A.yo = U.y - T.y
A.xo = U.x - T.x
A.fire()
return
/mob/living/simple_animal/pet/corgi/Ian/borgi/Life(seconds, times_fired)
..()
//spark for no reason
if(prob(5))
do_sparks(3, 1, src)
/mob/living/simple_animal/pet/corgi/Ian/borgi/handle_automated_action()
if(emagged && prob(25))
var/mob/living/carbon/target = locate() in view(10, src)
if(target)
shootAt(target)
/mob/living/simple_animal/pet/corgi/Ian/borgi/death(gibbed)
// Only execute the below if we successfully died
. = ..(gibbed)
if(!.)
return FALSE
do_sparks(3, 1, src)
@@ -1,6 +0,0 @@
/mob/living/simple_animal/pet/corgi/verb/chasetail()
set name = "Chase your tail"
set desc = "d'awwww."
set category = "Corgi"
visible_message("[src] [pick("dances around","chases [p_their()] tail")].","[pick("You dance around","You chase your tail")].")
spin(20, 1)
@@ -40,6 +40,7 @@
response_disarm = "gently pushes aside"
response_harm = "stomps"
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
unique_pet = TRUE
//LOOK AT THIS - ..()??
/*/mob/living/simple_animal/crab/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
@@ -0,0 +1,767 @@
//Dogs.
/mob/living/simple_animal/pet/dog
name = "dog"
icon_state = "blackdog"
icon_living = "blackdog"
icon_dead = "blackdog_dead"
response_help = "pets"
response_disarm = "bops"
response_harm = "kicks"
speak = list("YAP", "Woof!", "Bark!", "AUUUUUU")
speak_emote = list("barks", "woofs")
emote_hear = list("barks!", "woofs!", "yaps.","pants.")
emote_see = list("shakes its head.", "chases its tail.","shivers.")
faction = list("neutral")
see_in_dark = 5
speak_chance = 1
turns_per_move = 10
gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
var/bark_sound = list('sound/creatures/dog_bark1.ogg','sound/creatures/dog_bark2.ogg') //Used in emote.
var/yelp_sound = 'sound/creatures/dog_yelp.ogg' //Used on death.
var/last_eaten = 0
/mob/living/simple_animal/pet/dog/verb/chasetail()
set name = "Chase your tail"
set desc = "d'awwww."
set category = "Dog"
visible_message("[src] [pick("dances around", "chases [p_their()] tail")].", "[pick("You dance around", "You chase your tail")].")
spin(20, 1)
/mob/living/simple_animal/pet/dog/death(gibbed)
// Only execute the below if we successfully died
. = ..(gibbed)
if(!.)
return
playsound(src, yelp_sound, 75, TRUE)
/mob/living/simple_animal/pet/dog/emote(act, m_type = 1, message = null, force)
if(!incapacitated())
return
var/on_CD = 0
act = lowertext(act)
switch(act)
if("bark")
on_CD = handle_emote_CD()
if("yelp")
on_CD = handle_emote_CD()
else
on_CD = 0
if(!force && on_CD == 1)
return
switch(act)
if("bark")
message = "<B>[src]</B> [pick(src.speak_emote)]!"
m_type = 2 //audible
playsound(src, pick(src.bark_sound), 50, TRUE)
if("yelp")
message = "<B>[src]</B> yelps!"
m_type = 2 //audible
playsound(src, yelp_sound, 75, TRUE)
if("growl")
message = "<B>[src]</B> growls!"
m_type = 2 //audible
if("help")
to_chat(src, "scream, bark, growl")
..()
/mob/living/simple_animal/pet/dog/attack_hand(mob/living/carbon/human/M)
. = ..()
switch(M.a_intent)
if(INTENT_HELP)
wuv(1, M)
if(INTENT_HARM)
wuv(-1, M)
/mob/living/simple_animal/pet/dog/proc/wuv(change, mob/M)
if(change)
if(change > 0)
if(M && stat != DEAD) // Added check to see if this mob (the corgi) is dead to fix issue 2454
new /obj/effect/temp_visual/heart(loc)
custom_emote(1, "yaps happily!")
else
if(M && stat != DEAD) // Same check here, even though emote checks it as well (poor form to check it only in the help case)
custom_emote(1, "growls!")
//Corgis and pugs are now under one dog subtype
/mob/living/simple_animal/pet/dog/corgi
name = "\improper corgi"
real_name = "corgi"
desc = "It's a corgi."
icon_state = "corgi"
icon_living = "corgi"
icon_dead = "corgi_dead"
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/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 = CHEM_MOB_SPAWN_FRIENDLY
collar_type = "corgi"
var/obj/item/inventory_head
var/obj/item/inventory_back
var/shaved = FALSE
var/nofur = FALSE //Corgis that have risen past the material plane of existence.
/mob/living/simple_animal/pet/dog/corgi/Initialize(mapload)
. = ..()
regenerate_icons()
/mob/living/simple_animal/pet/dog/corgi/Destroy()
QDEL_NULL(inventory_head)
QDEL_NULL(inventory_back)
return ..()
/mob/living/simple_animal/pet/dog/corgi/handle_atom_del(atom/A)
if(A == inventory_head)
inventory_head = null
regenerate_icons()
if(A == inventory_back)
inventory_back = null
regenerate_icons()
return ..()
/mob/living/simple_animal/pet/dog/corgi/Life(seconds, times_fired)
. = ..()
regenerate_icons()
/mob/living/simple_animal/pet/dog/corgi/death(gibbed)
..(gibbed)
regenerate_icons()
/mob/living/simple_animal/pet/dog/corgi/show_inv(mob/user)
if(user.incapacitated() || !Adjacent(user))
return
user.set_machine(src)
var/dat = "<div align='center'><b>Inventory of [name]</b></div><p>"
dat += "<br><B>Head:</B> <A href='?src=[UID()];[inventory_head ? "remove_inv=head'>[inventory_head]" : "add_inv=head'>Nothing"]</A>"
dat += "<br><B>Back:</B> <A href='?src=[UID()];[inventory_back ? "remove_inv=back'>[inventory_back]" : "add_inv=back'>Nothing"]</A>"
dat += "<br><B>Collar:</B> <A href='?src=[UID()];[pcollar ? "remove_inv=collar'>[pcollar]" : "add_inv=collar'>Nothing"]</A>"
var/datum/browser/popup = new(user, "mob[UID()]", "[src]", 440, 250)
popup.set_content(dat)
popup.open()
/mob/living/simple_animal/pet/dog/corgi/getarmor(def_zone, type)
var/armorval = 0
if(def_zone)
if(def_zone == "head")
if(inventory_head)
armorval = inventory_head.armor[type]
else
if(inventory_back)
armorval = inventory_back.armor[type]
return armorval
else
if(inventory_head)
armorval += inventory_head.armor[type]
if(inventory_back)
armorval += inventory_back.armor[type]
return armorval * 0.5
/mob/living/simple_animal/pet/dog/corgi/attackby(obj/item/O, mob/user, params)
if(istype(O, /obj/item/razor))
if(shaved)
to_chat(user, "<span class='warning'>You can't shave this corgi, it's already been shaved!</span>")
return
if(nofur)
to_chat(user, "<span class='warning'>You can't shave this corgi, it doesn't have a fur coat!</span>")
return
user.visible_message("<span class='notice'>[user] starts to shave [src] using \the [O].", "<span class='notice'>You start to shave [src] using \the [O]...</span>")
if(do_after(user, 50, target = src))
user.visible_message("<span class='notice'>[user] shaves [src]'s hair using \the [O].</span>")
playsound(loc, O.usesound, 20, TRUE)
shaved = TRUE
icon_living = "[initial(icon_living)]_shaved"
icon_dead = "[initial(icon_living)]_shaved_dead"
if(stat == CONSCIOUS)
icon_state = icon_living
else
icon_state = icon_dead
return
..()
update_corgi_fluff()
/mob/living/simple_animal/pet/dog/corgi/Topic(href, href_list)
if(!(iscarbon(usr) || isrobot(usr)) || usr.incapacitated() || !Adjacent(usr))
usr << browse(null, "window=mob[UID()]")
usr.unset_machine()
return
//Removing from inventory
if(href_list["remove_inv"])
var/remove_from = href_list["remove_inv"]
switch(remove_from)
if("head")
if(inventory_head)
if(inventory_head.flags & NODROP)
to_chat(usr, "<span class='warning'>\The [inventory_head] is stuck too hard to [src] for you to remove!</span>")
return
usr.put_in_hands(inventory_head)
inventory_head = null
update_corgi_fluff()
regenerate_icons()
else
to_chat(usr, "<span class='danger'>There is nothing to remove from its [remove_from].</span>")
return
if("back")
if(inventory_back)
if(inventory_back.flags & NODROP)
to_chat(usr, "<span class='warning'>\The [inventory_head] is stuck too hard to [src] for you to remove!</span>")
return
usr.put_in_hands(inventory_back)
inventory_back = null
update_corgi_fluff()
regenerate_icons()
else
to_chat(usr, "<span class='danger'>There is nothing to remove from its [remove_from].</span>")
return
if("collar")
if(pcollar)
var/the_collar = pcollar
unEquip(pcollar)
usr.put_in_hands(the_collar)
pcollar = null
update_corgi_fluff()
regenerate_icons()
show_inv(usr)
//Adding things to inventory
else if(href_list["add_inv"])
var/add_to = href_list["add_inv"]
switch(add_to)
if("collar")
add_collar(usr.get_active_hand(), usr)
update_corgi_fluff()
if("head")
place_on_head(usr.get_active_hand(),usr)
if("back")
if(inventory_back)
to_chat(usr, "<span class='warning'>It's already wearing something!</span>")
return
else
var/obj/item/item_to_add = usr.get_active_hand()
if(!item_to_add)
usr.visible_message("<span class='notice'>[usr] pets [src].</span>", "<span class='notice'>You rest your hand on [src]'s back for a moment.</span>")
return
if(!usr.unEquip(item_to_add))
to_chat(usr, "<span class='warning'>\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s back!</span>")
return
if(istype(item_to_add, /obj/item/grenade/plastic/c4)) // last thing he ever wears, I guess
item_to_add.afterattack(src,usr,1)
return
//The objects that corgis can wear on their backs.
var/allowed = FALSE
if(ispath(item_to_add.dog_fashion, /datum/dog_fashion/back))
allowed = TRUE
if(!allowed)
to_chat(usr, "<span class='warning'>You set [item_to_add] on [src]'s back, but it falls off!</span>")
item_to_add.forceMove(drop_location())
if(prob(25))
step_rand(item_to_add)
for(var/i in list(1,2,4,8,4,8,4,dir))
setDir(i)
sleep(1)
return
item_to_add.forceMove(src)
inventory_back = item_to_add
update_corgi_fluff()
regenerate_icons()
show_inv(usr)
else
return ..()
//Corgis are supposed to be simpler, so only a select few objects can actually be put
//to be compatible with them. The objects are below.
//Many hats added, Some will probably be removed, just want to see which ones are popular.
// > some will probably be removed
/mob/living/simple_animal/pet/dog/corgi/proc/place_on_head(obj/item/item_to_add, mob/user)
if(istype(item_to_add, /obj/item/grenade/plastic/c4)) // last thing he ever wears, I guess
item_to_add.afterattack(src,user,1)
return
if(inventory_head)
if(user)
to_chat(user, "<span class='warning'>You can't put more than one hat on [src]!</span>")
return
if(!item_to_add)
user.visible_message("<span class='notice'>[user] pets [src].</span>", "<span class='notice'>You rest your hand on [src]'s head for a moment.</span>")
if(flags_2 & HOLOGRAM_2)
return
return
if(user && !user.unEquip(item_to_add))
to_chat(user, "<span class='warning'>\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s head!</span>")
return 0
var/valid = FALSE
if(ispath(item_to_add.dog_fashion, /datum/dog_fashion/head))
valid = TRUE
//Various hats and items (worn on his head) change Ian's behaviour. His attributes are reset when a hat is removed.
if(valid)
if(health <= 0)
to_chat(user, "<span class='notice'>There is merely a dull, lifeless look in [real_name]'s eyes as you put the [item_to_add] on [p_them()].</span>")
else if(user)
user.visible_message("<span class='notice'>[user] puts [item_to_add] on [real_name]'s head. [src] looks at [user] and barks once.</span>",
"<span class='notice'>You put [item_to_add] on [real_name]'s head. [src] gives you a peculiar look, then wags [p_their()] tail once and barks.</span>",
"<span class='italics'>You hear a friendly-sounding bark.</span>")
item_to_add.forceMove(src)
inventory_head = item_to_add
update_corgi_fluff()
regenerate_icons()
else
to_chat(user, "<span class='warning'>You set [item_to_add] on [src]'s head, but it falls off!</span>")
item_to_add.forceMove(drop_location())
if(prob(25))
step_rand(item_to_add)
for(var/i in list(1,2,4,8,4,8,4,dir))
setDir(i)
sleep(1)
return valid
/mob/living/simple_animal/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 its head.", "chases its tail.","shivers.")
desc = initial(desc)
set_light(0)
atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0)
mutations.Remove(BREATHLESS)
minbodytemp = initial(minbodytemp)
if(inventory_head && inventory_head.dog_fashion)
var/datum/dog_fashion/DF = new inventory_head.dog_fashion(src)
DF.apply(src)
if(inventory_back && inventory_back.dog_fashion)
var/datum/dog_fashion/DF = new inventory_back.dog_fashion(src)
DF.apply(src)
/mob/living/simple_animal/pet/dog/corgi/regenerate_icons()
..()
if(inventory_head)
var/image/head_icon
var/datum/dog_fashion/DF = new inventory_head.dog_fashion(src)
if(!DF.obj_icon_state)
DF.obj_icon_state = inventory_head.icon_state
if(!DF.obj_alpha)
DF.obj_alpha = inventory_head.alpha
if(!DF.obj_color)
DF.obj_color = inventory_head.color
if(health <= 0)
head_icon = DF.get_overlay(dir = EAST)
head_icon.pixel_y = -8
head_icon.transform = turn(head_icon.transform, 180)
else
head_icon = DF.get_overlay()
add_overlay(head_icon)
if(inventory_back)
var/image/back_icon
var/datum/dog_fashion/DF = new inventory_back.dog_fashion(src)
if(!DF.obj_icon_state)
DF.obj_icon_state = inventory_back.icon_state
if(!DF.obj_alpha)
DF.obj_alpha = inventory_back.alpha
if(!DF.obj_color)
DF.obj_color = inventory_back.color
if(health <= 0)
back_icon = DF.get_overlay(dir = EAST)
back_icon.pixel_y = -11
back_icon.transform = turn(back_icon.transform, 180)
else
back_icon = DF.get_overlay()
add_overlay(back_icon)
//IAN! SQUEEEEEEEEE~
/mob/living/simple_animal/pet/dog/corgi/Ian
name = "Ian"
real_name = "Ian" //Intended to hold the name without altering it.
gender = MALE
desc = "It's the HoP's beloved corgi."
var/turns_since_scan = 0
var/obj/movement_target
response_help = "pets"
response_disarm = "bops"
response_harm = "kicks"
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
unique_pet = TRUE
var/age = 0
var/record_age = 1
var/memory_saved = FALSE
var/saved_head //path
/mob/living/simple_animal/pet/dog/corgi/Ian/Initialize(mapload)
. = ..()
//parent call must happen first to ensure IAN
//is not in nullspace when child puppies spawn
Read_Memory()
if(age == 0)
var/turf/target = get_turf(loc)
if(target)
var/mob/living/simple_animal/pet/dog/corgi/puppy/P = new /mob/living/simple_animal/pet/dog/corgi/puppy(target)
P.name = "Ian"
P.real_name = "Ian"
P.gender = MALE
P.desc = "It's the HoP's beloved corgi puppy."
Write_Memory(FALSE)
qdel(src)
return
else if(age == record_age)
icon_state = "old_corgi"
icon_living = "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
/mob/living/simple_animal/pet/dog/corgi/Ian/Life()
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()
if(!memory_saved)
Write_Memory(TRUE)
..()
/mob/living/simple_animal/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
S["record_age"] >> record_age
S["saved_head"] >> saved_head
fdel("data/npc_saves/Ian.sav")
else
var/json_file = file("data/npc_saves/Ian.json")
if(!fexists(json_file))
return
var/list/json = json_decode(file2text(json_file))
age = json["age"]
record_age = json["record_age"]
saved_head = json["saved_head"]
if(isnull(age))
age = 0
if(isnull(record_age))
record_age = 1
if(saved_head)
place_on_head(new saved_head)
/mob/living/simple_animal/pet/dog/corgi/Ian/proc/Write_Memory(dead)
var/json_file = file("data/npc_saves/Ian.json")
var/list/file_data = list()
if(!dead)
file_data["age"] = age + 1
if((age + 1) > record_age)
file_data["record_age"] = record_age + 1
else
file_data["record_age"] = record_age
if(inventory_head)
file_data["saved_head"] = inventory_head.type
else
file_data["saved_head"] = null
else
file_data["age"] = 0
file_data["record_age"] = record_age
file_data["saved_head"] = null
fdel(json_file)
WRITE_FILE(json_file, json_encode(file_data))
/mob/living/simple_animal/pet/dog/corgi/Ian/handle_automated_movement()
. = ..()
//Feeding, chasing food, FOOOOODDDD
if(!resting && !buckled)
turns_since_scan++
if(turns_since_scan > 5)
turns_since_scan = 0
if((movement_target) && !(isturf(movement_target.loc) || ishuman(movement_target.loc) ))
movement_target = null
stop_automated_movement = 0
if( !movement_target || !(movement_target.loc in oview(src, 3)) )
movement_target = null
stop_automated_movement = 0
for(var/obj/item/reagent_containers/food/snacks/S in oview(src,3))
if(isturf(S.loc) || ishuman(S.loc))
movement_target = S
break
if(movement_target)
spawn(0)
stop_automated_movement = 1
step_to(src,movement_target,1)
sleep(3)
step_to(src,movement_target,1)
sleep(3)
step_to(src,movement_target,1)
if(movement_target) //Not redundant due to sleeps, Item can be gone in 6 decisecomds
if(movement_target.loc.x < src.x)
dir = WEST
else if(movement_target.loc.x > src.x)
dir = EAST
else if(movement_target.loc.y < src.y)
dir = SOUTH
else if(movement_target.loc.y > src.y)
dir = NORTH
else
dir = SOUTH
if(!Adjacent(movement_target)) //can't reach food through windows.
return
if(isturf(movement_target.loc) )
movement_target.attack_animal(src)
else if(ishuman(movement_target.loc) )
if(prob(20))
custom_emote(1, "stares at [movement_target.loc]'s [movement_target] with a sad puppy-face")
if(prob(1))
custom_emote(1, pick("dances around.","chases its tail!"))
spin(20, 1)
/obj/item/reagent_containers/food/snacks/meat/corgi
name = "Corgi meat"
desc = "Tastes like... well you know..."
/mob/living/simple_animal/pet/dog/corgi/Ian/narsie_act()
playsound(src, 'sound/misc/demon_dies.ogg', 75, TRUE)
var/mob/living/simple_animal/pet/dog/corgi/narsie/N = new(loc)
N.setDir(dir)
gib()
/mob/living/simple_animal/pet/dog/corgi/narsie
name = "Nars-Ian"
desc = "Ia! Ia!"
icon_state = "narsian"
icon_living = "narsian"
icon_dead = "narsian_dead"
faction = list("neutral", "cult")
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
nofur = TRUE
unique_pet = TRUE
/mob/living/simple_animal/pet/dog/corgi/narsie/Life()
..()
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))
visible_message("<span class='warning'>[src] devours [P]!</span>", \
"<span class='cult big bold'>DELICIOUS SOULS</span>")
playsound(src, 'sound/misc/demon_attack1.ogg', 75, TRUE)
narsie_act()
if(P.mind)
if(P.mind.hasSoul)
P.mind.hasSoul = FALSE //Nars-Ian ate your soul; you don't have one anymore
else
visible_message("<span class='cult big bold'>... Aw, someone beat me to this one.</span>")
P.gib()
/mob/living/simple_animal/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()
adjustBruteLoss(-maxHealth)
/mob/living/simple_animal/pet/dog/corgi/puppy
name = "\improper corgi puppy"
real_name = "corgi"
desc = "It's a corgi puppy!"
icon_state = "puppy"
icon_living = "puppy"
icon_dead = "puppy_dead"
density = FALSE
pass_flags = PASSMOB
mob_size = MOB_SIZE_SMALL
collar_type = "puppy"
//puppies cannot wear anything.
/mob/living/simple_animal/pet/dog/corgi/puppy/Topic(href, href_list)
if(href_list["remove_inv"] || href_list["add_inv"])
to_chat(usr, "<span class='warning'>You can't fit this on [src]!</span>")
return
..()
/mob/living/simple_animal/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..."
icon_state = "void_puppy"
icon_living = "void_puppy"
icon_dead = "void_puppy_dead"
nofur = TRUE
unsuitable_atmos_damage = 0
minbodytemp = TCMB
maxbodytemp = T0C + 40
/mob/living/simple_animal/pet/dog/corgi/puppy/void/Process_Spacemove(movement_dir = 0)
return 1 //Void puppies can navigate space.
//LISA! SQUEEEEEEEEE~
/mob/living/simple_animal/pet/dog/corgi/Lisa
name = "Lisa"
real_name = "Lisa"
gender = FEMALE
desc = "It's a corgi with a cute pink bow."
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
unique_pet = TRUE
icon_state = "lisa"
icon_living = "lisa"
icon_dead = "lisa_dead"
response_help = "pets"
response_disarm = "bops"
response_harm = "kicks"
var/turns_since_scan = 0
var/puppies = 0
//Lisa already has a cute bow!
/mob/living/simple_animal/pet/dog/corgi/Lisa/Topic(href, href_list)
if(href_list["remove_inv"] || href_list["add_inv"])
to_chat(usr, "<span class='danger'>[src] already has a cute bow!</span>")
return
..()
/mob/living/simple_animal/pet/dog/corgi/Lisa/Life()
..()
make_babies()
/mob/living/simple_animal/pet/dog/corgi/Lisa/handle_automated_movement()
. = ..()
if(!resting && !buckled)
if(prob(1))
custom_emote(1, pick("dances around.","chases her tail."))
spin(20, 1)
/mob/living/simple_animal/pet/dog/corgi/exoticcorgi
name = "Exotic Corgi"
desc = "As cute as it is colorful!"
icon = 'icons/mob/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/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/borgi
name = "E-N"
real_name = "E-N" //Intended to hold the name without altering it.
desc = "It's a borgi."
icon_state = "borgi"
icon_living = "borgi"
bark_sound = null //No robo-bjork...
yelp_sound = null //Or robo-Yelp.
var/emagged = 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/blood/gibs/robot)
del_on_death = 1
deathmessage = "blows apart!"
animal_species = /mob/living/simple_animal/pet/dog/corgi/borgi
nofur = TRUE
/mob/living/simple_animal/pet/dog/corgi/borgi/emag_act(user as mob)
if(!emagged)
emagged = 1
visible_message("<span class='warning'>[user] swipes a card through [src].</span>", "<span class='notice'>You overload [src]s internal reactor.</span>")
addtimer(CALLBACK(src, .proc/explode), 1000)
/mob/living/simple_animal/pet/dog/corgi/borgi/proc/explode()
visible_message("<span class='warning'>[src] makes an odd whining noise.</span>")
explosion(get_turf(src), 0, 1, 4, 7)
death()
/mob/living/simple_animal/pet/dog/corgi/borgi/proc/shootAt(var/atom/movable/target)
var/turf/T = get_turf(src)
var/turf/U = get_turf(target)
if(!T || !U)
return
var/obj/item/projectile/beam/A = new /obj/item/projectile/beam(loc)
A.icon = 'icons/effects/genetics.dmi'
A.icon_state = "eyelasers"
playsound(src.loc, 'sound/weapons/taser2.ogg', 75, 1)
A.current = T
A.yo = U.y - T.y
A.xo = U.x - T.x
A.fire()
/mob/living/simple_animal/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(25))
var/mob/living/carbon/target = locate() in view(10, src)
if(target)
shootAt(target)
/mob/living/simple_animal/pet/dog/corgi/borgi/death(gibbed)
// Only execute the below if we successfully died
. = ..(gibbed)
if(!.)
return FALSE
do_sparks(3, 1, src)
///Pugs
/mob/living/simple_animal/pet/dog/pug
name = "\improper pug"
real_name = "pug"
desc = "It's a pug."
icon = 'icons/mob/pets.dmi'
icon_state = "pug"
icon_living = "pug"
icon_dead = "pug_dead"
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/pug = 3)
gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
collar_type = "pug"
/mob/living/simple_animal/pet/pug/handle_automated_movement()
. = ..()
if(!resting && !buckled)
if(prob(1))
custom_emote(1, pick("chases its tail."))
spawn(0)
for(var/i in list(1, 2, 4, 8, 4, 2, 1, 2, 4, 8, 4, 2, 1, 2, 4, 8, 4, 2))
dir = i
sleep(1)
@@ -1,5 +1,5 @@
//Foxxy
/mob/living/simple_animal/pet/fox
/mob/living/simple_animal/pet/dog/fox
name = "fox"
desc = "It's a fox. I wonder what it says?"
icon_state = "fox"
@@ -20,13 +20,14 @@
gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
//Captain fox
/mob/living/simple_animal/pet/fox/Renault
/mob/living/simple_animal/pet/dog/fox/Renault
name = "Renault"
desc = "Renault, the Captain's trustworthy fox. I wonder what it says?"
unique_pet = TRUE
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
//Syndi fox
/mob/living/simple_animal/pet/fox/Syndifox
/mob/living/simple_animal/pet/dog/fox/Syndifox
name = "Syndifox"
desc = "Syndifox, the Syndicate's most respected mascot. I wonder what it says?"
icon_state = "Syndifox"
@@ -35,6 +36,7 @@
icon_resting = "Syndifox_rest"
mutations = list(BREATHLESS)
faction = list("syndicate")
unique_pet = TRUE
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
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
@@ -168,6 +168,7 @@
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "splats"
unique_pet = TRUE
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
@@ -1,31 +1,16 @@
/mob/living/simple_animal/pet
icon = 'icons/mob/pets.dmi'
can_collar = 1
mob_size = MOB_SIZE_SMALL
blood_volume = BLOOD_VOLUME_NORMAL
can_collar = TRUE
/mob/living/simple_animal/pet/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
/mob/living/simple_animal/pet/attackby(obj/item/O, mob/user, params)
if(istype(O, /obj/item/newspaper))
if(!stat)
user.visible_message("[user] baps [name] on the nose with the rolled up [O].")
user.visible_message("<span class='notice'>[user] baps [name] on the nose with the rolled up [O].</span>")
spawn(0)
for(var/i in list(1,2,4,8,4,2,1,2))
dir = i
setDir(i)
sleep(1)
else
..()
/mob/living/simple_animal/pet/revive()
..()
regenerate_icons()
/mob/living/simple_animal/pet/death(gibbed)
. = ..()
regenerate_icons()
/mob/living/simple_animal/pet/regenerate_icons(cut_overlays = 1)
if(cut_overlays)
overlays.Cut()
if(collar)
overlays += "[icon_state]collar"
overlays += "[icon_state]tag"
return ..()
@@ -1,30 +0,0 @@
//Corgi //best comment 2014
/mob/living/simple_animal/pet/pug
name = "\improper pug"
real_name = "pug"
desc = "It's a pug."
icon_state = "pug"
icon_living = "pug"
icon_dead = "pug_dead"
speak = list("YAP", "Woof!", "Bark!", "AUUUUUU")
speak_emote = list("barks", "woofs")
emote_hear = list("barks!", "woofs!", "yaps.","pants.")
emote_see = list("shakes its head.", "chases its tail.","shivers.")
speak_chance = 1
turns_per_move = 10
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/pug = 3)
response_help = "pets"
response_disarm = "bops"
response_harm = "kicks"
see_in_dark = 5
gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
/mob/living/simple_animal/pet/pug/handle_automated_movement()
. = ..()
if(!resting && !buckled)
if(prob(1))
custom_emote(1, pick("chases its tail."))
spawn(0)
for(var/i in list(1, 2, 4, 8, 4, 2, 1, 2, 4, 8, 4, 2, 1, 2, 4, 8, 4, 2))
dir = i
sleep(1)
@@ -28,4 +28,5 @@
/mob/living/simple_animal/pet/sloth/paperwork
name = "Paperwork"
desc = "Cargo's pet sloth. About as useful as the rest of the techs."
unique_pet = TRUE
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
@@ -16,5 +16,5 @@
harm_intent_damage = 3
melee_damage_lower = 15
melee_damage_upper = 20
unique_pet = TRUE
atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 2, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0)
@@ -135,7 +135,7 @@
dat += "<tr><td><B>Headset:</B></td><td><A href='?src=[UID()];[ears?"remove_inv":"add_inv"]=ears'>[(ears && !(ears.flags&ABSTRACT)) ? ears : "<font color=grey>Empty</font>"]</A></td></tr>"
if(can_collar)
dat += "<tr><td>&nbsp;</td></tr>"
dat += "<tr><td><B>Collar:</B></td><td><A href='?src=[UID()];[collar?"remove_inv":"add_inv"]=collar'>[(collar && !(collar.flags&ABSTRACT)) ? collar : "<font color=grey>Empty</font>"]</A></td></tr>"
dat += "<tr><td><B>Collar:</B></td><td><A href='?src=[UID()];[pcollar ? "remove_inv" : "add_inv"]=collar'>[(pcollar && !(pcollar.flags&ABSTRACT)) ? pcollar : "<font color=grey>Empty</font>"]</A></td></tr>"
dat += {"</table>
<A href='?src=[user.UID()];mach_close=mob\ref[src]'>Close</A>
@@ -697,6 +697,7 @@
"What were the wires again?",
"Goddam emaggers!"
)
unique_pet = TRUE
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
/mob/living/simple_animal/parrot/Poly/New()
@@ -61,8 +61,10 @@
var/speed = 1 //LETS SEE IF I CAN SET SPEEDS FOR SIMPLE MOBS WITHOUT DESTROYING EVERYTHING. Higher speed is slower, negative speed is faster
var/can_hide = 0
var/obj/item/clothing/accessory/petcollar/collar = null
var/can_collar = 0 // can add collar to mob or not
var/obj/item/clothing/accessory/petcollar/pcollar = null
var/collar_type //if the mob has collar sprites, define them.
var/unique_pet = FALSE // if the mob can be renamed
var/can_collar = FALSE // can add collar to mob or not
//Hot simple_animal baby making vars
var/list/childtype = null
@@ -109,15 +111,12 @@
verbs -= /mob/verb/observe
if(!can_hide)
verbs -= /mob/living/simple_animal/verb/hide
if(collar)
if(!istype(collar))
collar = new(src)
if(pcollar)
pcollar = new(src)
regenerate_icons()
/mob/living/simple_animal/Destroy()
if(collar)
collar.forceMove(loc)
collar = null
QDEL_NULL(pcollar)
master_commander = null
GLOB.simple_animals[AIStatus] -= src
if(SSnpcpool.state == SS_PAUSED && LAZYLEN(SSnpcpool.currentrun))
@@ -133,6 +132,11 @@
return ..()
/mob/living/simple_animal/handle_atom_del(atom/A)
if(A == pcollar)
pcollar = null
return ..()
/mob/living/simple_animal/examine(mob/user)
. = ..()
if(stat == DEAD)
@@ -147,11 +151,17 @@
..()
if(icon_resting && stat != DEAD)
icon_state = icon_resting
if(collar_type)
collar_type = "[initial(collar_type)]_rest"
regenerate_icons()
/mob/living/simple_animal/StopResting(updating = 1)
..()
if(icon_resting && stat != DEAD)
icon_state = icon_living
if(collar_type)
collar_type = "[initial(collar_type)]"
regenerate_icons()
/mob/living/simple_animal/update_stat(reason = "none given")
if(status_flags & GODMODE)
@@ -278,6 +288,9 @@
for(var/path in butcher_results)
for(var/i in 1 to butcher_results[path])
new path(Tsec)
if(pcollar)
pcollar.forceMove(drop_location())
pcollar = null
..()
/mob/living/simple_animal/emote(act, m_type = 1, message = null, force)
@@ -348,6 +361,9 @@
if(flip_on_death)
transform = transform.Turn(180)
density = 0
if(collar_type)
collar_type = "[initial(collar_type)]_dead"
regenerate_icons()
/mob/living/simple_animal/proc/CanAttack(atom/the_target)
if(see_invisible < the_target.invisibility)
@@ -387,6 +403,9 @@
density = initial(density)
update_canmove()
flying = initial(flying)
if(collar_type)
collar_type = "[initial(collar_type)]"
regenerate_icons()
/mob/living/simple_animal/proc/make_babies() // <3 <3 <3
if(gender != FEMALE || stat || next_scan_time > world.time || !childtype || !animal_species || !SSticker.IsRoundInProgress())
@@ -421,7 +440,7 @@
return
user.set_machine(src)
var/dat = "<table><tr><td><B>Collar:</B></td><td><A href='?src=[UID()];item=[slot_collar]'>[(collar && !(collar.flags&ABSTRACT)) ? collar : "<font color=grey>Empty</font>"]</A></td></tr></table>"
var/dat = "<table><tr><td><B>Collar:</B></td><td><A href='?src=[UID()];item=[slot_collar]'>[(pcollar && !(pcollar.flags & ABSTRACT)) ? pcollar : "<font color=grey>Empty</font>"]</A></td></tr></table>"
dat += "<A href='?src=[user.UID()];mach_close=mob\ref[src]'>Close</A>"
var/datum/browser/popup = new(user, "mob\ref[src]", "[src]", 440, 250)
@@ -431,14 +450,14 @@
/mob/living/simple_animal/get_item_by_slot(slot_id)
switch(slot_id)
if(slot_collar)
return collar
return pcollar
. = ..()
/mob/living/simple_animal/can_equip(obj/item/I, slot, disable_warning = 0)
// . = ..() // Do not call parent. We do not want animals using their hand slots.
switch(slot)
if(slot_collar)
if(collar)
if(pcollar)
return FALSE
if(!can_collar)
return FALSE
@@ -453,32 +472,26 @@
if(!slot)
return FALSE
W.forceMove(src)
W.equipped(src, slot)
W.layer = ABOVE_HUD_LAYER
W.plane = ABOVE_HUD_PLANE
switch(slot)
if(slot_collar)
collar = W
if(collar.tagname)
name = collar.tagname
real_name = collar.tagname
regenerate_icons()
add_collar(W)
/mob/living/simple_animal/unEquip(obj/item/I, force)
. = ..()
if(!. || !I)
return
if(I == collar)
collar = null
if(I == pcollar)
pcollar = null
regenerate_icons()
/mob/living/simple_animal/get_access()
. = ..()
if(collar)
. |= collar.GetAccess()
if(pcollar)
. |= pcollar.GetAccess()
/mob/living/simple_animal/update_canmove(delay_action_updates = 0)
if(paralysis || stunned || weakened || stat || resting)
@@ -572,4 +585,25 @@
..()
if(AIStatus == AI_Z_OFF)
SSidlenpcpool.idle_mobs_by_zlevel[old_z] -= src
toggle_ai(initial(AIStatus))
toggle_ai(initial(AIStatus))
/mob/living/simple_animal/proc/add_collar(obj/item/clothing/accessory/petcollar/P, mob/user)
if(QDELETED(P) || pcollar)
return
if(user && !user.unEquip(P))
return
P.forceMove(src)
P.equipped(src)
pcollar = P
regenerate_icons()
if(user)
to_chat(user, "<span class='notice'>You put [P] around [src]'s neck.</span>")
if(P.tagname && !unique_pet)
name = P.tagname
real_name = P.tagname
/mob/living/simple_animal/regenerate_icons()
cut_overlays()
if(pcollar && collar_type)
add_overlay("[collar_type]collar")
add_overlay("[collar_type]tag")
+4 -5
View File
@@ -184,8 +184,7 @@
for(var/t in bodyparts) //this really should not be necessary
qdel(t)
var/mob/living/simple_animal/pet/corgi/new_corgi = new /mob/living/simple_animal/pet/corgi (loc)
new_corgi.a_intent = INTENT_HARM
var/mob/living/simple_animal/pet/dog/corgi/new_corgi = new /mob/living/simple_animal/pet/dog/corgi (loc)
new_corgi.key = key
to_chat(new_corgi, "<B>You are now a Corgi. Yap Yap!</B>")
@@ -277,7 +276,7 @@
return 0
if(ispath(MP, /mob/living/simple_animal/pet/cat))
return 1
if(ispath(MP, /mob/living/simple_animal/pet/corgi))
if(ispath(MP, /mob/living/simple_animal/pet/dog/corgi))
return 1
if(ispath(MP, /mob/living/simple_animal/crab))
return 1
@@ -288,9 +287,9 @@
if(ispath(MP, /mob/living/simple_animal/parrot))
return 1
if(!GAMEMODE_IS_NUCLEAR)
if(ispath(MP, /mob/living/simple_animal/pet/fox/Syndifox))
if(ispath(MP, /mob/living/simple_animal/pet/dog/fox/Syndifox))
return 0
if(ispath(MP, /mob/living/simple_animal/pet/fox))
if(ispath(MP, /mob/living/simple_animal/pet/dog/fox))
return 1
if(ispath(MP, /mob/living/simple_animal/chick))
return 1
+1 -1
View File
@@ -20,7 +20,7 @@
burn_state = FLAMMABLE
burntime = 5
attack_verb = list("bapped")
dog_fashion = /datum/dog_fashion/head
var/info //What's actually written on the paper.
var/info_links //A different version of the paper which includes html links at fields and EOF
var/stamps //The (text for the) stamps on the paper.
+2 -2
View File
@@ -234,7 +234,7 @@
if("parrot")
new_mob = new /mob/living/simple_animal/parrot(M.loc)
if("corgi")
new_mob = new /mob/living/simple_animal/pet/corgi(M.loc)
new_mob = new /mob/living/simple_animal/pet/dog/corgi(M.loc)
if("crab")
new_mob = new /mob/living/simple_animal/crab(M.loc)
if("cat")
@@ -248,7 +248,7 @@
if("lizard")
new_mob = new /mob/living/simple_animal/lizard(M.loc)
if("fox")
new_mob = new /mob/living/simple_animal/pet/fox(M.loc)
new_mob = new /mob/living/simple_animal/pet/dog/fox(M.loc)
else
new_mob = new /mob/living/simple_animal/chick(M.loc)
new_mob.universal_speak = TRUE
@@ -189,7 +189,7 @@
/datum/chemical_reaction/corgium/on_reaction(datum/reagents/holder, created_volume)
var/location = get_turf(holder.my_atom)
new /mob/living/simple_animal/pet/corgi(location)
new /mob/living/simple_animal/pet/dog/corgi(location)
..()
/datum/chemical_reaction/flaptonium
+4 -4
View File
@@ -89,7 +89,7 @@
component_parts += new /obj/item/stock_parts/micro_laser(src)
component_parts += new /obj/item/stock_parts/micro_laser(src)
spawn(1)
trackedIan = locate(/mob/living/simple_animal/pet/corgi/Ian) in GLOB.mob_list
trackedIan = locate(/mob/living/simple_animal/pet/dog/corgi/Ian) in GLOB.mob_list
trackedRuntime = locate(/mob/living/simple_animal/pet/cat/Runtime) in GLOB.mob_list
SetTypeReactions()
RefreshParts()
@@ -511,7 +511,7 @@
trackedIan.loc = src.loc
investigate_log("Experimentor has stolen Ian!", "experimentor") //...if anyone ever fixes it...
else
new /mob/living/simple_animal/pet/corgi(src.loc)
new /mob/living/simple_animal/pet/dog/corgi(src.loc)
investigate_log("Experimentor has spawned a new corgi.", "experimentor")
ejectItem(TRUE)
if(globalMalf > 36 && globalMalf < 59)
@@ -620,7 +620,7 @@
/obj/item/relic/New()
icon_state = pick("shock_kit","armor-igniter-analyzer","infra-igniter0","infra-igniter1","radio-multitool","prox-radio1","radio-radio","timer-multitool0","radio-igniter-tank")
realName = "[pick("broken","twisted","spun","improved","silly","regular","badly made")] [pick("device","object","toy","suspicious tech","gear")]"
floof = pick(/mob/living/simple_animal/pet/corgi, /mob/living/simple_animal/pet/cat, /mob/living/simple_animal/pet/fox, /mob/living/simple_animal/mouse, /mob/living/simple_animal/pet/pug, /mob/living/simple_animal/lizard, /mob/living/simple_animal/diona, /mob/living/simple_animal/butterfly, /mob/living/carbon/human/monkey)
floof = pick(/mob/living/simple_animal/pet/dog/corgi, /mob/living/simple_animal/pet/cat, /mob/living/simple_animal/pet/dog/fox, /mob/living/simple_animal/mouse, /mob/living/simple_animal/pet/pug, /mob/living/simple_animal/lizard, /mob/living/simple_animal/diona, /mob/living/simple_animal/butterfly, /mob/living/carbon/human/monkey)
/obj/item/relic/proc/reveal()
@@ -677,7 +677,7 @@
to_chat(user, message)
var/animals = rand(1,25)
var/counter
var/list/valid_animals = list(/mob/living/simple_animal/parrot,/mob/living/simple_animal/butterfly,/mob/living/simple_animal/pet/cat,/mob/living/simple_animal/pet/corgi,/mob/living/simple_animal/crab,/mob/living/simple_animal/pet/fox,/mob/living/simple_animal/lizard,/mob/living/simple_animal/mouse,/mob/living/simple_animal/pet/pug,/mob/living/simple_animal/hostile/bear,/mob/living/simple_animal/hostile/poison/bees,/mob/living/simple_animal/hostile/carp)
var/list/valid_animals = list(/mob/living/simple_animal/parrot,/mob/living/simple_animal/butterfly,/mob/living/simple_animal/pet/cat,/mob/living/simple_animal/pet/dog/corgi,/mob/living/simple_animal/crab,/mob/living/simple_animal/pet/dog/fox,/mob/living/simple_animal/lizard,/mob/living/simple_animal/mouse,/mob/living/simple_animal/pet/pug,/mob/living/simple_animal/hostile/bear,/mob/living/simple_animal/hostile/poison/bees,/mob/living/simple_animal/hostile/carp)
for(counter = 1; counter < animals; counter++)
var/mobType = pick(valid_animals)
new mobType(get_turf(src))