mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-12 07:33:34 +01:00
Merge pull request #12206 from Fox-McCloud/refactors-corgis
Refactors Corgis and Other Doggos
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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!"
|
||||
|
||||
@@ -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'
|
||||
)
|
||||
@@ -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,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"
|
||||
|
||||
@@ -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!"
|
||||
|
||||
@@ -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'
|
||||
)
|
||||
|
||||
@@ -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
|
||||
@@ -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")
|
||||
|
||||
@@ -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)
|
||||
..()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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> </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> </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")
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user