mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 18:32:03 +00:00
Revenge of the Mannequins (#29763)
* ohfuck that wasn't the right branch * ohfuck * tweaks
This commit is contained in:
@@ -1167,6 +1167,35 @@ proc/get_mob_with_client_list()
|
|||||||
else
|
else
|
||||||
return zone
|
return zone
|
||||||
|
|
||||||
|
/proc/limb_define_to_part_define(var/zone)
|
||||||
|
switch(zone)
|
||||||
|
if (LIMB_HEAD)
|
||||||
|
return HEAD
|
||||||
|
if (LIMB_CHEST)
|
||||||
|
return UPPER_TORSO
|
||||||
|
if (LIMB_GROIN)
|
||||||
|
return LOWER_TORSO
|
||||||
|
if (TARGET_MOUTH)
|
||||||
|
return MOUTH
|
||||||
|
if (TARGET_EYES)
|
||||||
|
return EYES
|
||||||
|
if (LIMB_RIGHT_HAND)
|
||||||
|
return HAND_RIGHT
|
||||||
|
if (LIMB_LEFT_HAND)
|
||||||
|
return HAND_LEFT
|
||||||
|
if (LIMB_LEFT_ARM)
|
||||||
|
return ARM_LEFT
|
||||||
|
if (LIMB_RIGHT_ARM)
|
||||||
|
return ARM_RIGHT
|
||||||
|
if (LIMB_LEFT_LEG)
|
||||||
|
return LEG_LEFT
|
||||||
|
if (LIMB_RIGHT_LEG)
|
||||||
|
return LEG_RIGHT
|
||||||
|
if (LIMB_LEFT_FOOT)
|
||||||
|
return FOOT_LEFT
|
||||||
|
if (LIMB_RIGHT_FOOT)
|
||||||
|
return FOOT_RIGHT
|
||||||
|
|
||||||
/*
|
/*
|
||||||
get_holder_at_turf_level(): Similar to get_turf(), will return the "highest up" holder of this atom, excluding the turf.
|
get_holder_at_turf_level(): Similar to get_turf(), will return the "highest up" holder of this atom, excluding the turf.
|
||||||
Example: A fork inside a box inside a locker will return the locker. Essentially, get_just_before_turf().
|
Example: A fork inside a box inside a locker will return the locker. Essentially, get_just_before_turf().
|
||||||
|
|||||||
@@ -151,7 +151,7 @@ proc/get_id_photo(var/mob/living/carbon/human/H)
|
|||||||
else if(H.species.anatomy_flags & RGBSKINTONE)
|
else if(H.species.anatomy_flags & RGBSKINTONE)
|
||||||
preview_icon.Blend(rgb(H.my_appearance.r_hair, H.my_appearance.g_hair, H.my_appearance.b_hair), ICON_ADD)
|
preview_icon.Blend(rgb(H.my_appearance.r_hair, H.my_appearance.g_hair, H.my_appearance.b_hair), ICON_ADD)
|
||||||
|
|
||||||
var/icon/eyes_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = H.species ? H.species.eyes : "eyes_s")
|
var/icon/eyes_s = new/icon("icon" = 'icons/mob/hair_styles.dmi', "icon_state" = H.species ? H.species.eyes : "eyes_s")
|
||||||
|
|
||||||
eyes_s.Blend(rgb(H.my_appearance.r_eyes, H.my_appearance.g_eyes, H.my_appearance.b_eyes), ICON_ADD)
|
eyes_s.Blend(rgb(H.my_appearance.r_eyes, H.my_appearance.g_eyes, H.my_appearance.b_eyes), ICON_ADD)
|
||||||
|
|
||||||
|
|||||||
@@ -37,7 +37,7 @@
|
|||||||
I.Blend(new /icon('icons/mob/human.dmi', "mouth_m_s"), ICON_OVERLAY)
|
I.Blend(new /icon('icons/mob/human.dmi', "mouth_m_s"), ICON_OVERLAY)
|
||||||
I.Blend(new /icon('icons/mob/human.dmi', "underwear1_m_s"), ICON_OVERLAY)
|
I.Blend(new /icon('icons/mob/human.dmi', "underwear1_m_s"), ICON_OVERLAY)
|
||||||
|
|
||||||
var/icon/U = new /icon('icons/mob/human_face.dmi', "hair_a_s")
|
var/icon/U = new /icon('icons/mob/hair_styles.dmi', "hair_a_s")
|
||||||
U.Blend(rgb(src.h_r, src.h_g, src.h_b), ICON_ADD)
|
U.Blend(rgb(src.h_r, src.h_g, src.h_b), ICON_ADD)
|
||||||
|
|
||||||
I.Blend(U, ICON_OVERLAY)
|
I.Blend(U, ICON_OVERLAY)
|
||||||
|
|||||||
@@ -74,9 +74,10 @@
|
|||||||
..()
|
..()
|
||||||
|
|
||||||
/obj/structure/closet/statue/Destroy()
|
/obj/structure/closet/statue/Destroy()
|
||||||
..()
|
|
||||||
|
|
||||||
processing_objects.Remove(src)
|
processing_objects.Remove(src)
|
||||||
|
for (var/atom/A in src)
|
||||||
|
qdel(A)
|
||||||
|
..()
|
||||||
|
|
||||||
|
|
||||||
/obj/structure/closet/statue/proc/dissolve()
|
/obj/structure/closet/statue/proc/dissolve()
|
||||||
@@ -92,7 +93,8 @@
|
|||||||
spawn(10)
|
spawn(10)
|
||||||
for(var/i=1 to 5)
|
for(var/i=1 to 5)
|
||||||
for(var/mob/living/L in contents)
|
for(var/mob/living/L in contents)
|
||||||
L.adjustBruteLoss(60)
|
L.adjustBruteLoss(10)
|
||||||
|
if (L.health <= 0)
|
||||||
L.mutations |= M_NOCLONE
|
L.mutations |= M_NOCLONE
|
||||||
|
|
||||||
if(ishuman(L) && !(M_HUSK in L.mutations))
|
if(ishuman(L) && !(M_HUSK in L.mutations))
|
||||||
|
|||||||
@@ -5,11 +5,12 @@
|
|||||||
#define MANNEQUIN_ICONS_SLOT "slot_icon"
|
#define MANNEQUIN_ICONS_SLOT "slot_icon"
|
||||||
#define MANNEQUIN_ICONS_PRIMITIVE "primitive_icon"
|
#define MANNEQUIN_ICONS_PRIMITIVE "primitive_icon"
|
||||||
#define MANNEQUIN_ICONS_SPECIES "species_icon"
|
#define MANNEQUIN_ICONS_SPECIES "species_icon"
|
||||||
|
#define MANNEQUIN_ICONS_CORGI "corgi"
|
||||||
#define MANNEQUIN_ICONS_FAT "fat_icon"
|
#define MANNEQUIN_ICONS_FAT "fat_icon"
|
||||||
#define MANNEQUIN_DYNAMIC_LAYER "dynamic_layer"
|
#define MANNEQUIN_DYNAMIC_LAYER "dynamic_layer"
|
||||||
|
|
||||||
/obj/structure/mannequin
|
/obj/structure/mannequin
|
||||||
name = "human marble mannequin"
|
name = "human man marble mannequin"
|
||||||
desc = "You almost feel like it's going to come alive any second."
|
desc = "You almost feel like it's going to come alive any second."
|
||||||
icon = 'icons/obj/mannequin.dmi'
|
icon = 'icons/obj/mannequin.dmi'
|
||||||
icon_state="mannequin_marble_human"
|
icon_state="mannequin_marble_human"
|
||||||
@@ -24,12 +25,27 @@
|
|||||||
var/species_type = /datum/species/human
|
var/species_type = /datum/species/human
|
||||||
var/fat = 0
|
var/fat = 0
|
||||||
var/primitive = 0
|
var/primitive = 0
|
||||||
|
var/corgi = FALSE
|
||||||
|
gender = MALE
|
||||||
var/list/clothing = list()
|
var/list/clothing = list()
|
||||||
var/list/obj/item/held_items = list(null, null)
|
var/list/obj/item/held_items = list(null, null)
|
||||||
|
var/hair_style
|
||||||
|
var/beard_style
|
||||||
|
var/hair_color = "#B9C1B8"
|
||||||
var/clothing_offset_x = 0
|
var/clothing_offset_x = 0
|
||||||
var/clothing_offset_y = 3*PIXEL_MULTIPLIER
|
var/clothing_offset_y = 3*PIXEL_MULTIPLIER
|
||||||
var/health = 90
|
var/health = 90
|
||||||
var/maxHealth = 90
|
var/maxHealth = 90
|
||||||
|
var/has_pedestal = TRUE
|
||||||
|
var/timer = 80 //in seconds
|
||||||
|
var/mob/living/captured
|
||||||
|
var/intialTox = 0
|
||||||
|
var/intialFire = 0
|
||||||
|
var/intialBrute = 0
|
||||||
|
var/intialOxy = 0
|
||||||
|
var/dissolving = FALSE
|
||||||
|
|
||||||
|
var/additional_damage = 0//tracking how much damage we took
|
||||||
|
|
||||||
var/list/all_slot_icons = list()
|
var/list/all_slot_icons = list()
|
||||||
|
|
||||||
@@ -58,7 +74,7 @@
|
|||||||
var/chaintrap_range = 0//= Range at which mannequin awakens nearby mannequins when it awakens.
|
var/chaintrap_range = 0//= Range at which mannequin awakens nearby mannequins when it awakens.
|
||||||
|
|
||||||
|
|
||||||
/obj/structure/mannequin/New()
|
/obj/structure/mannequin/New(turf/loc, var/f_style, var/h_style, var/list/items_to_wear, var/list/items_to_hold = list(null, null), var/mob_to_capture)
|
||||||
..()
|
..()
|
||||||
|
|
||||||
species = new species_type()
|
species = new species_type()
|
||||||
@@ -77,6 +93,28 @@
|
|||||||
SLOT_MANNEQUIN_ID,
|
SLOT_MANNEQUIN_ID,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
beard_style = f_style
|
||||||
|
hair_style = h_style
|
||||||
|
|
||||||
|
if (items_to_wear?.len)
|
||||||
|
for (var/slot in clothing)
|
||||||
|
var/obj/item/O = items_to_wear[slot]
|
||||||
|
if (O)
|
||||||
|
clothing[slot] = O
|
||||||
|
O.forceMove(src)
|
||||||
|
O.mannequin_equip(src,slot)
|
||||||
|
|
||||||
|
for (var/i = 1 to held_items.len)
|
||||||
|
var/obj/item/O = items_to_hold[i]
|
||||||
|
if (O)
|
||||||
|
held_items[i] = O
|
||||||
|
O.forceMove(src)
|
||||||
|
O.mannequin_equip(src,"hands",i)
|
||||||
|
|
||||||
|
if (mob_to_capture)
|
||||||
|
capture_mob(mob_to_capture)
|
||||||
|
|
||||||
|
|
||||||
for(var/cloth_slot in clothing)
|
for(var/cloth_slot in clothing)
|
||||||
all_slot_icons[cloth_slot] = get_slot_icons(cloth_slot)
|
all_slot_icons[cloth_slot] = get_slot_icons(cloth_slot)
|
||||||
|
|
||||||
@@ -85,6 +123,97 @@
|
|||||||
if(awake)
|
if(awake)
|
||||||
Awaken()
|
Awaken()
|
||||||
|
|
||||||
|
/obj/structure/mannequin/Destroy()
|
||||||
|
processing_objects.Remove(src)
|
||||||
|
captured = null
|
||||||
|
held_items.len = 0
|
||||||
|
clothing.len = 0
|
||||||
|
..()
|
||||||
|
|
||||||
|
/obj/structure/mannequin/process()
|
||||||
|
timer--
|
||||||
|
if (captured)
|
||||||
|
captured.setToxLoss(intialTox)
|
||||||
|
captured.adjustFireLoss(intialFire - captured.getFireLoss())
|
||||||
|
captured.adjustBruteLoss(intialBrute - captured.getBruteLoss())
|
||||||
|
captured.setOxyLoss(intialOxy)
|
||||||
|
if (timer >= 5)
|
||||||
|
captured.Paralyse(2)
|
||||||
|
if (timer <= 0)
|
||||||
|
freeCaptive()
|
||||||
|
qdel(src)
|
||||||
|
|
||||||
|
/obj/structure/mannequin/proc/capture_mob(var/mob/M)
|
||||||
|
if(!isliving(M))
|
||||||
|
return
|
||||||
|
has_pedestal = FALSE
|
||||||
|
var/mob/living/L = M
|
||||||
|
if(L.locked_to)
|
||||||
|
L.locked_to = 0
|
||||||
|
L.anchored = 0
|
||||||
|
if(L.client)
|
||||||
|
L.client.perspective = EYE_PERSPECTIVE
|
||||||
|
L.client.eye = src
|
||||||
|
|
||||||
|
for(var/obj/item/I in L.held_items)
|
||||||
|
L.drop_item(I)
|
||||||
|
|
||||||
|
if(L.locked_to)
|
||||||
|
L.unlock_from()
|
||||||
|
|
||||||
|
L.sdisabilities |= MUTE
|
||||||
|
L.delayNextAttack(timer)
|
||||||
|
L.click_delayer.setDelay(timer)
|
||||||
|
health = L.health*2
|
||||||
|
maxHealth = L.maxHealth*2
|
||||||
|
intialTox = L.getToxLoss()
|
||||||
|
intialFire = L.getFireLoss()
|
||||||
|
intialBrute = L.getBruteLoss()
|
||||||
|
intialOxy = L.getOxyLoss()
|
||||||
|
|
||||||
|
dir = L.dir
|
||||||
|
|
||||||
|
L.forceMove(src)
|
||||||
|
|
||||||
|
name = "statue of \a [name]"
|
||||||
|
if(iscorgi(L))
|
||||||
|
desc = "If it takes forever, I will wait for you..."
|
||||||
|
else
|
||||||
|
desc = "An incredibly lifelike marble carving."
|
||||||
|
|
||||||
|
if(timer < 0)
|
||||||
|
L.death(FALSE)
|
||||||
|
else
|
||||||
|
processing_objects.Add(src)
|
||||||
|
|
||||||
|
M.forceMove(src)
|
||||||
|
captured = M
|
||||||
|
processing_objects.Add(src)
|
||||||
|
|
||||||
|
/obj/structure/mannequin/proc/dissolve()
|
||||||
|
if(dissolving)
|
||||||
|
return
|
||||||
|
|
||||||
|
visible_message("<span class='notice'>The statue's surface begins cracking and dissolving!</span>")
|
||||||
|
|
||||||
|
processing_objects.Remove(src) //Disable the statue's processing (otherwise it may heal the occupants or something like that)
|
||||||
|
dissolving = TRUE
|
||||||
|
|
||||||
|
//Kill and husk the occupants over the course of 6 seconds, then dump them out (they won't be cloneable but their brains will be OK)
|
||||||
|
spawn(10)
|
||||||
|
for(var/i=1 to 5)
|
||||||
|
for(var/mob/living/L in contents)
|
||||||
|
L.adjustBruteLoss(10)
|
||||||
|
if (L.health <= 0)
|
||||||
|
L.mutations |= M_NOCLONE
|
||||||
|
|
||||||
|
if(ishuman(L) && !(M_HUSK in L.mutations))
|
||||||
|
var/mob/living/carbon/human/H = L
|
||||||
|
H.ChangeToHusk()
|
||||||
|
sleep(10)
|
||||||
|
|
||||||
|
breakDown()
|
||||||
|
|
||||||
/obj/structure/mannequin/HasProximity(var/atom/movable/AM)
|
/obj/structure/mannequin/HasProximity(var/atom/movable/AM)
|
||||||
if(trapped_prox && isliving(AM))
|
if(trapped_prox && isliving(AM))
|
||||||
Awaken()
|
Awaken()
|
||||||
@@ -308,6 +437,7 @@
|
|||||||
|
|
||||||
/obj/structure/mannequin/proc/getDamage(var/damage)
|
/obj/structure/mannequin/proc/getDamage(var/damage)
|
||||||
health -= damage
|
health -= damage
|
||||||
|
additional_damage += damage
|
||||||
healthCheck()
|
healthCheck()
|
||||||
if(health > 0 && (trapped_strip || trapped_prox))
|
if(health > 0 && (trapped_strip || trapped_prox))
|
||||||
Awaken()
|
Awaken()
|
||||||
@@ -319,8 +449,69 @@
|
|||||||
breakDown()
|
breakDown()
|
||||||
|
|
||||||
|
|
||||||
|
/obj/structure/mannequin/proc/freeCaptive()
|
||||||
|
if (!captured)
|
||||||
|
return
|
||||||
|
captured.forceMove(loc)
|
||||||
|
for(var/cloth in clothing)
|
||||||
|
var/obj/O = clothing[cloth]
|
||||||
|
if (O)
|
||||||
|
switch(cloth)
|
||||||
|
if(SLOT_MANNEQUIN_ICLOTHING)
|
||||||
|
captured.equip_to_slot_or_drop(O, slot_w_uniform)
|
||||||
|
if(SLOT_MANNEQUIN_FEET)
|
||||||
|
captured.equip_to_slot_or_drop(O, slot_shoes)
|
||||||
|
if(SLOT_MANNEQUIN_GLOVES)
|
||||||
|
captured.equip_to_slot_or_drop(O, slot_gloves)
|
||||||
|
if(SLOT_MANNEQUIN_EARS)
|
||||||
|
captured.equip_to_slot_or_drop(O, slot_ears)
|
||||||
|
if(SLOT_MANNEQUIN_OCLOTHING)
|
||||||
|
captured.equip_to_slot_or_drop(O, slot_wear_suit)
|
||||||
|
if(SLOT_MANNEQUIN_EYES)
|
||||||
|
captured.equip_to_slot_or_drop(O, slot_glasses)
|
||||||
|
if(SLOT_MANNEQUIN_BELT)
|
||||||
|
captured.equip_to_slot_or_drop(O, slot_belt)
|
||||||
|
if(SLOT_MANNEQUIN_MASK)
|
||||||
|
captured.equip_to_slot_or_drop(O, slot_wear_mask)
|
||||||
|
if(SLOT_MANNEQUIN_HEAD)
|
||||||
|
if (iscorgi(captured))
|
||||||
|
var/mob/living/simple_animal/corgi/corgi = captured
|
||||||
|
O.forceMove(captured)
|
||||||
|
corgi.inventory_back = O
|
||||||
|
corgi.regenerate_icons()
|
||||||
|
else
|
||||||
|
captured.equip_to_slot_or_drop(O, slot_head)
|
||||||
|
if(SLOT_MANNEQUIN_BACK)
|
||||||
|
if (iscorgi(captured))
|
||||||
|
var/mob/living/simple_animal/corgi/corgi = captured
|
||||||
|
corgi.place_on_head(O)
|
||||||
|
else
|
||||||
|
captured.equip_to_slot_or_drop(O, slot_back)
|
||||||
|
if(SLOT_MANNEQUIN_ID)
|
||||||
|
captured.equip_to_slot_or_drop(O, slot_wear_id)
|
||||||
|
clothing.len = 0
|
||||||
|
|
||||||
|
for(var/index = 1 to held_items.len)
|
||||||
|
var/obj/item/tool = held_items[index]
|
||||||
|
if (!tool)
|
||||||
|
continue
|
||||||
|
captured.put_in_hands(tool)
|
||||||
|
held_items.len = 0
|
||||||
|
|
||||||
|
captured.dir = dir
|
||||||
|
captured.apply_damage(additional_damage)
|
||||||
|
|
||||||
/obj/structure/mannequin/proc/breakDown()
|
/obj/structure/mannequin/proc/breakDown()
|
||||||
|
visible_message("<span class='warning'><b>[src]</b> collapses!</span>")
|
||||||
new /obj/effect/decal/cleanable/dirt(loc)
|
new /obj/effect/decal/cleanable/dirt(loc)
|
||||||
|
playsound(loc, 'sound/effects/stone_crumble.ogg', 100, 1)
|
||||||
|
if (captured)
|
||||||
|
if (dissolving)
|
||||||
|
freeCaptive()
|
||||||
|
qdel(src)
|
||||||
|
return
|
||||||
|
else
|
||||||
|
captured.gib()
|
||||||
for(var/cloth in clothing)
|
for(var/cloth in clothing)
|
||||||
if(clothing[cloth])
|
if(clothing[cloth])
|
||||||
var/obj/item/cloth_to_drop = clothing[cloth]
|
var/obj/item/cloth_to_drop = clothing[cloth]
|
||||||
@@ -367,6 +558,10 @@
|
|||||||
/obj/structure/mannequin/proc/show_inv(var/mob/user)
|
/obj/structure/mannequin/proc/show_inv(var/mob/user)
|
||||||
var/dat
|
var/dat
|
||||||
|
|
||||||
|
if (corgi)
|
||||||
|
dat += "<BR><B>Head:</B> <A href='?src=\ref[src];item=[SLOT_MANNEQUIN_HEAD]'>[makeStrippingButton(clothing[SLOT_MANNEQUIN_HEAD])]</A>"
|
||||||
|
dat += "<BR><B>Back:</B> <A href='?src=\ref[src];item=[SLOT_MANNEQUIN_BACK]'>[makeStrippingButton(clothing[SLOT_MANNEQUIN_BACK])]</A>"
|
||||||
|
else
|
||||||
for(var/i = 1 to held_items.len)
|
for(var/i = 1 to held_items.len)
|
||||||
dat += "<B>[capitalize(get_index_limb_name(i))]</B> <A href='?src=\ref[src];hands=[i]'>[makeStrippingButton(get_held_item_by_index(i))]</A><BR>"
|
dat += "<B>[capitalize(get_index_limb_name(i))]</B> <A href='?src=\ref[src];hands=[i]'>[makeStrippingButton(get_held_item_by_index(i))]</A><BR>"
|
||||||
|
|
||||||
@@ -386,6 +581,7 @@
|
|||||||
if(!primitive)
|
if(!primitive)
|
||||||
dat += "<BR><B>Belt:</B> <A href='?src=\ref[src];item=[SLOT_MANNEQUIN_BELT]'>[makeStrippingButton(clothing[SLOT_MANNEQUIN_BELT])]</A>"
|
dat += "<BR><B>Belt:</B> <A href='?src=\ref[src];item=[SLOT_MANNEQUIN_BELT]'>[makeStrippingButton(clothing[SLOT_MANNEQUIN_BELT])]</A>"
|
||||||
dat += "<BR><B>ID:</B> <A href='?src=\ref[src];item=[SLOT_MANNEQUIN_ID]'>[makeStrippingButton(clothing[SLOT_MANNEQUIN_ID])]</A>"
|
dat += "<BR><B>ID:</B> <A href='?src=\ref[src];item=[SLOT_MANNEQUIN_ID]'>[makeStrippingButton(clothing[SLOT_MANNEQUIN_ID])]</A>"
|
||||||
|
|
||||||
dat += "<BR>"
|
dat += "<BR>"
|
||||||
dat += {"
|
dat += {"
|
||||||
<BR>
|
<BR>
|
||||||
@@ -402,7 +598,19 @@
|
|||||||
if(!(itemToCheck.clothing_flags & ONESIZEFITSALL))
|
if(!(itemToCheck.clothing_flags & ONESIZEFITSALL))
|
||||||
if(user)
|
if(user)
|
||||||
to_chat(user, "<span class='warning'>\The [src] is too large for \the [itemToCheck]</span>")
|
to_chat(user, "<span class='warning'>\The [src] is too large for \the [itemToCheck]</span>")
|
||||||
return 0
|
return FALSE
|
||||||
|
|
||||||
|
if (corgi)
|
||||||
|
switch(item_slot)
|
||||||
|
if(SLOT_MANNEQUIN_HEAD)
|
||||||
|
if(itemToCheck.type in valid_corgi_hats)
|
||||||
|
return TRUE
|
||||||
|
if(SLOT_MANNEQUIN_BACK)
|
||||||
|
if(itemToCheck.type in valid_corgi_backpacks)
|
||||||
|
return TRUE
|
||||||
|
if(user)
|
||||||
|
to_chat(user, "<span class='warning'>\The [itemToCheck] doesn't fit there.</span>")
|
||||||
|
return FALSE
|
||||||
|
|
||||||
var/inv_slot
|
var/inv_slot
|
||||||
|
|
||||||
@@ -431,11 +639,11 @@
|
|||||||
inv_slot = SLOT_ID
|
inv_slot = SLOT_ID
|
||||||
|
|
||||||
if(itemToCheck.slot_flags & inv_slot)
|
if(itemToCheck.slot_flags & inv_slot)
|
||||||
return 1
|
return TRUE
|
||||||
|
|
||||||
if(user)
|
if(user)
|
||||||
to_chat(user, "<span class='warning'>\The [itemToCheck] doesn't fit there.</span>")
|
to_chat(user, "<span class='warning'>\The [itemToCheck] doesn't fit there.</span>")
|
||||||
return 0
|
return FALSE
|
||||||
|
|
||||||
/obj/structure/mannequin/update_icon()
|
/obj/structure/mannequin/update_icon()
|
||||||
..()
|
..()
|
||||||
@@ -444,6 +652,26 @@
|
|||||||
O.layer = FLOAT_LAYER
|
O.layer = FLOAT_LAYER
|
||||||
O.overlays.len = 0
|
O.overlays.len = 0
|
||||||
|
|
||||||
|
if (hair_style)
|
||||||
|
var/datum/sprite_accessory/hair_style_icon = hair_styles_list[hair_style]
|
||||||
|
var/icon/hair_s = new/icon("icon" = 'icons/mob/hair_styles.dmi', "icon_state" = "[hair_style_icon.icon_state]_s")
|
||||||
|
if(hair_style_icon.additional_accessories)
|
||||||
|
hair_s.Blend(icon("icon" = 'icons/mob/hair_styles.dmi', "icon_state" = "[hair_style_icon.icon_state]_acc"), ICON_OVERLAY)
|
||||||
|
if (species && species.name != "Human")
|
||||||
|
hair_s.MapColors(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28))
|
||||||
|
hair_s.Blend(hair_color, ICON_ADD)
|
||||||
|
O.overlays += hair_s
|
||||||
|
|
||||||
|
if (beard_style)
|
||||||
|
var/datum/sprite_accessory/beard_style_icon = facial_hair_styles_list[beard_style]
|
||||||
|
var/icon/beard_s = new/icon("icon" = 'icons/mob/hair_styles.dmi', "icon_state" = "[beard_style_icon.icon_state]_s")
|
||||||
|
if(beard_style_icon.additional_accessories)
|
||||||
|
beard_s.Blend(icon("icon" = 'icons/mob/hair_styles.dmi', "icon_state" = "[beard_style_icon.icon_state]_acc"), ICON_OVERLAY)
|
||||||
|
if (species && species.name != "Human")
|
||||||
|
beard_s.MapColors(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28))
|
||||||
|
beard_s.Blend(hair_color, ICON_ADD)
|
||||||
|
O.overlays += beard_s
|
||||||
|
|
||||||
for(var/cloth_slot in clothing)
|
for(var/cloth_slot in clothing)
|
||||||
update_icon_slot(O,cloth_slot)
|
update_icon_slot(O,cloth_slot)
|
||||||
|
|
||||||
@@ -453,11 +681,17 @@
|
|||||||
var/image/I = new()
|
var/image/I = new()
|
||||||
I.appearance = O.appearance
|
I.appearance = O.appearance
|
||||||
I.plane = FLOAT_PLANE
|
I.plane = FLOAT_PLANE
|
||||||
|
if (icon != 'icons/obj/mannequin_64x64.dmi')
|
||||||
|
if (has_pedestal)
|
||||||
|
icon = 'icons/obj/mannequin.dmi'
|
||||||
I.pixel_x = clothing_offset_x
|
I.pixel_x = clothing_offset_x
|
||||||
I.pixel_y = clothing_offset_y
|
I.pixel_y = clothing_offset_y
|
||||||
|
else
|
||||||
|
icon = 'icons/mob/mannequin.dmi'
|
||||||
overlays += I
|
overlays += I
|
||||||
qdel(O)
|
qdel(O)
|
||||||
|
|
||||||
|
|
||||||
/obj/structure/mannequin/proc/update_icon_slot(var/obj/abstract/Overlays/O, var/slot)
|
/obj/structure/mannequin/proc/update_icon_slot(var/obj/abstract/Overlays/O, var/slot)
|
||||||
var/obj/item/clothing/clothToUpdate = clothing[slot]
|
var/obj/item/clothing/clothToUpdate = clothing[slot]
|
||||||
if(clothToUpdate)
|
if(clothToUpdate)
|
||||||
@@ -484,6 +718,8 @@
|
|||||||
else
|
else
|
||||||
if(primitive)
|
if(primitive)
|
||||||
I = image(slotIcon[MANNEQUIN_ICONS_PRIMITIVE], t_state)
|
I = image(slotIcon[MANNEQUIN_ICONS_PRIMITIVE], t_state)
|
||||||
|
else if (corgi)
|
||||||
|
I = image(slotIcon[MANNEQUIN_ICONS_CORGI], t_state)
|
||||||
else if(clothToUpdate.icon_override)
|
else if(clothToUpdate.icon_override)
|
||||||
I = image(clothToUpdate.icon_override, t_state)
|
I = image(clothToUpdate.icon_override, t_state)
|
||||||
else
|
else
|
||||||
@@ -590,11 +826,13 @@
|
|||||||
slotIcon[MANNEQUIN_ICONS_SLOT] = default_icons.head_icons
|
slotIcon[MANNEQUIN_ICONS_SLOT] = default_icons.head_icons
|
||||||
slotIcon[MANNEQUIN_ICONS_PRIMITIVE] = 'icons/mob/monkey_head.dmi'
|
slotIcon[MANNEQUIN_ICONS_PRIMITIVE] = 'icons/mob/monkey_head.dmi'
|
||||||
slotIcon[MANNEQUIN_ICONS_SPECIES] = species.head_icons
|
slotIcon[MANNEQUIN_ICONS_SPECIES] = species.head_icons
|
||||||
|
slotIcon[MANNEQUIN_ICONS_CORGI] = 'icons/mob/corgi_head.dmi'
|
||||||
slotIcon[MANNEQUIN_DYNAMIC_LAYER] = HEAD_LAYER
|
slotIcon[MANNEQUIN_DYNAMIC_LAYER] = HEAD_LAYER
|
||||||
if(SLOT_MANNEQUIN_BACK)
|
if(SLOT_MANNEQUIN_BACK)
|
||||||
slotIcon[MANNEQUIN_ICONS_SLOT] = default_icons.back_icons
|
slotIcon[MANNEQUIN_ICONS_SLOT] = default_icons.back_icons
|
||||||
slotIcon[MANNEQUIN_ICONS_PRIMITIVE] = default_icons.back_icons
|
slotIcon[MANNEQUIN_ICONS_PRIMITIVE] = default_icons.back_icons
|
||||||
slotIcon[MANNEQUIN_ICONS_SPECIES] = species.back_icons
|
slotIcon[MANNEQUIN_ICONS_SPECIES] = species.back_icons
|
||||||
|
slotIcon[MANNEQUIN_ICONS_CORGI] = 'icons/mob/corgi_back.dmi'
|
||||||
slotIcon[MANNEQUIN_DYNAMIC_LAYER] = BACK_LAYER
|
slotIcon[MANNEQUIN_DYNAMIC_LAYER] = BACK_LAYER
|
||||||
if(SLOT_MANNEQUIN_ID)
|
if(SLOT_MANNEQUIN_ID)
|
||||||
slotIcon[MANNEQUIN_ICONS_SLOT] = default_icons.id_icons
|
slotIcon[MANNEQUIN_ICONS_SLOT] = default_icons.id_icons
|
||||||
@@ -683,6 +921,11 @@
|
|||||||
spin()
|
spin()
|
||||||
|
|
||||||
|
|
||||||
|
/obj/structure/mannequin/woman
|
||||||
|
name = "human woman marble mannequin"
|
||||||
|
icon_state="mannequin_marble_human_woman"
|
||||||
|
gender = FEMALE
|
||||||
|
|
||||||
/obj/structure/mannequin/fat
|
/obj/structure/mannequin/fat
|
||||||
name = "fat human marble mannequin"
|
name = "fat human marble mannequin"
|
||||||
icon_state="mannequin_marble_fat_human"
|
icon_state="mannequin_marble_fat_human"
|
||||||
@@ -699,20 +942,42 @@
|
|||||||
primitive = 1
|
primitive = 1
|
||||||
clothing_offset_y = -5*PIXEL_MULTIPLIER
|
clothing_offset_y = -5*PIXEL_MULTIPLIER
|
||||||
|
|
||||||
|
/obj/structure/mannequin/corgi
|
||||||
|
name = "corgi marble mannequin"
|
||||||
|
icon_state="mannequin_marble_corgi"
|
||||||
|
corgi = 1
|
||||||
|
|
||||||
/obj/structure/mannequin/wood
|
/obj/structure/mannequin/wood
|
||||||
name = "human wooden mannequin"
|
name = "human man wooden mannequin"
|
||||||
desc = "This should look great in a visual arts workshop."
|
desc = "This should look great in a visual arts workshop."
|
||||||
icon_state="mannequin_wooden_human"
|
icon_state="mannequin_wooden_human"
|
||||||
|
hair_color = "#705036"
|
||||||
health = 30
|
health = 30
|
||||||
maxHealth = 30
|
maxHealth = 30
|
||||||
trueForm = /mob/living/simple_animal/hostile/mannequin/wood
|
trueForm = /mob/living/simple_animal/hostile/mannequin/wood
|
||||||
autoignition_temperature = AUTOIGNITION_WOOD
|
autoignition_temperature = AUTOIGNITION_WOOD
|
||||||
fire_fuel = 2.5
|
fire_fuel = 2.5
|
||||||
|
|
||||||
|
/obj/structure/mannequin/wood/New(turf/loc, var/f_style, var/h_style, var/list/items_to_wear, var/list/items_to_hold, var/mob_to_capture)
|
||||||
|
..()
|
||||||
|
if (mob_to_capture)
|
||||||
|
if(iscorgi(mob_to_capture))
|
||||||
|
desc = "If it takes forever, I will wait for you..."
|
||||||
|
else
|
||||||
|
desc = "An incredibly lifelike wooden carving."
|
||||||
|
|
||||||
/obj/structure/mannequin/wood/breakDown()
|
/obj/structure/mannequin/wood/breakDown()
|
||||||
new /obj/item/stack/sheet/wood(loc, 5)//You get half the materials used to make a block bac)
|
new /obj/item/stack/sheet/wood(loc, 5)//You get half the materials used to make a block bac)
|
||||||
..()
|
..()
|
||||||
|
|
||||||
|
/obj/structure/mannequin/wood/dissolve()
|
||||||
|
return
|
||||||
|
|
||||||
|
/obj/structure/mannequin/wood/woman
|
||||||
|
name = "human woman wooden mannequin"
|
||||||
|
icon_state="mannequin_wooden_human_woman"
|
||||||
|
gender = FEMALE
|
||||||
|
|
||||||
/obj/structure/mannequin/wood/fat
|
/obj/structure/mannequin/wood/fat
|
||||||
name = "fat human wooden mannequin"
|
name = "fat human wooden mannequin"
|
||||||
icon_state="mannequin_wooden_fat_human"
|
icon_state="mannequin_wooden_fat_human"
|
||||||
@@ -729,6 +994,11 @@
|
|||||||
primitive = 1
|
primitive = 1
|
||||||
clothing_offset_y = -5*PIXEL_MULTIPLIER
|
clothing_offset_y = -5*PIXEL_MULTIPLIER
|
||||||
|
|
||||||
|
/obj/structure/mannequin/wood/corgi
|
||||||
|
name = "corgi wooden mannequin"
|
||||||
|
icon_state="mannequin_wooden_corgi"
|
||||||
|
corgi = 1
|
||||||
|
|
||||||
/obj/structure/mannequin/animationBolt(var/mob/firer)
|
/obj/structure/mannequin/animationBolt(var/mob/firer)
|
||||||
Awaken(firer)
|
Awaken(firer)
|
||||||
|
|
||||||
@@ -738,6 +1008,7 @@
|
|||||||
awakening = 1
|
awakening = 1
|
||||||
for(var/obj/structure/mannequin/M in range(src,chaintrap_range))
|
for(var/obj/structure/mannequin/M in range(src,chaintrap_range))
|
||||||
M.Awaken()
|
M.Awaken()
|
||||||
|
if (has_pedestal)
|
||||||
var/obj/item/trash/mannequin/newPedestal = new pedestal(loc)
|
var/obj/item/trash/mannequin/newPedestal = new pedestal(loc)
|
||||||
newPedestal.dir = dir
|
newPedestal.dir = dir
|
||||||
var/mob/living/simple_animal/hostile/mannequin/livingMannequin = new trueForm(loc)
|
var/mob/living/simple_animal/hostile/mannequin/livingMannequin = new trueForm(loc)
|
||||||
@@ -746,27 +1017,51 @@
|
|||||||
livingMannequin.health = health
|
livingMannequin.health = health
|
||||||
livingMannequin.maxHealth = maxHealth
|
livingMannequin.maxHealth = maxHealth
|
||||||
livingMannequin.dir = dir
|
livingMannequin.dir = dir
|
||||||
|
livingMannequin.additional_damage = additional_damage
|
||||||
|
livingMannequin.timer = timer
|
||||||
|
if (captured)
|
||||||
|
livingMannequin.captured_mob = captured
|
||||||
|
captured.forceMove(livingMannequin)
|
||||||
|
captured = null
|
||||||
var/image/I = image('icons/effects/32x32.dmi',"blank")
|
var/image/I = image('icons/effects/32x32.dmi',"blank")
|
||||||
I.overlays |= overlays
|
I.overlays |= overlays
|
||||||
|
if (has_pedestal)
|
||||||
I.pixel_x = -clothing_offset_x
|
I.pixel_x = -clothing_offset_x
|
||||||
I.pixel_y = -clothing_offset_y
|
I.pixel_y = -clothing_offset_y
|
||||||
livingMannequin.overlays += I
|
livingMannequin.overlays += I
|
||||||
for(var/slot in clothing)
|
for(var/slot in clothing)
|
||||||
if(clothing[slot])
|
if(clothing[slot])
|
||||||
var/obj/item/cloth = clothing[slot]
|
var/obj/item/cloth = clothing[slot]
|
||||||
|
cloth.mannequin_unequip(src)
|
||||||
cloth.forceMove(livingMannequin)
|
cloth.forceMove(livingMannequin)
|
||||||
livingMannequin.clothing += cloth
|
cloth.mannequin_equip(livingMannequin,slot)
|
||||||
|
livingMannequin.clothing[slot] = cloth
|
||||||
clothing[slot] = null
|
clothing[slot] = null
|
||||||
for(var/obj/item/tool in held_items)
|
if (held_items?.len)
|
||||||
|
for(var/index = 1 to held_items.len)
|
||||||
|
var/obj/item/tool = get_held_item_by_index(index)
|
||||||
|
if (!tool)
|
||||||
|
continue
|
||||||
|
tool.mannequin_unequip(src)
|
||||||
tool.forceMove(livingMannequin)
|
tool.forceMove(livingMannequin)
|
||||||
livingMannequin.clothing += tool
|
tool.mannequin_equip(livingMannequin,"hands",index)
|
||||||
|
livingMannequin.held_items[index] = tool
|
||||||
held_items -= tool
|
held_items -= tool
|
||||||
|
|
||||||
|
//If we're holding a weapon stronger than our base damage, let's use it instead
|
||||||
if(tool.force >= livingMannequin.melee_damage_lower)
|
if(tool.force >= livingMannequin.melee_damage_lower)
|
||||||
livingMannequin.melee_damage_lower = tool.force
|
livingMannequin.melee_damage_lower = tool.force
|
||||||
livingMannequin.melee_damage_upper = tool.force
|
livingMannequin.melee_damage_upper = tool.force
|
||||||
livingMannequin.attacktext = "swings [tool] at"
|
livingMannequin.equipped_melee_weapon = tool
|
||||||
if(tool.hitsound)
|
|
||||||
livingMannequin.attack_sound = tool.hitsound
|
if (livingMannequin.equipped_melee_weapon)
|
||||||
|
livingMannequin.attacktext = "swings \the [livingMannequin.equipped_melee_weapon] at"
|
||||||
|
visible_message("<span class='warning'>\The [src] grips \the [livingMannequin.equipped_melee_weapon].</span>")
|
||||||
|
if(livingMannequin.equipped_melee_weapon.hitsound)
|
||||||
|
livingMannequin.attack_sound = livingMannequin.equipped_melee_weapon.hitsound
|
||||||
|
|
||||||
|
if (istype(tool, /obj/item/weapon/gun))
|
||||||
|
livingMannequin.equipGun(tool)
|
||||||
if(firer)
|
if(firer)
|
||||||
livingMannequin.faction = "\ref[firer]"
|
livingMannequin.faction = "\ref[firer]"
|
||||||
qdel(src)
|
qdel(src)
|
||||||
@@ -783,30 +1078,47 @@
|
|||||||
icon_state = "marble"
|
icon_state = "marble"
|
||||||
var/time_to_sculpt = 200
|
var/time_to_sculpt = 200
|
||||||
var/list/available_sculptures = list(
|
var/list/available_sculptures = list(
|
||||||
"human" = /obj/structure/mannequin,
|
"human man" = /obj/structure/mannequin,
|
||||||
|
"human woman" = /obj/structure/mannequin/woman,
|
||||||
"fat human" = /obj/structure/mannequin/fat,
|
"fat human" = /obj/structure/mannequin/fat,
|
||||||
"monkey" = /obj/structure/mannequin/monkey,
|
"monkey" = /obj/structure/mannequin/monkey,
|
||||||
"vox" = /obj/structure/mannequin/vox,
|
"vox" = /obj/structure/mannequin/vox,
|
||||||
|
"corgi" = /obj/structure/mannequin/corgi,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
/obj/structure/block/attackby(var/obj/item/weapon/W,var/mob/user)
|
/obj/structure/block/attackby(var/obj/item/weapon/W,var/mob/user)
|
||||||
if(W.is_wrench(user))
|
if(W.is_wrench(user))
|
||||||
return wrenchAnchor(user, W, 5 SECONDS)
|
return wrenchAnchor(user, W, 5 SECONDS)
|
||||||
else if(istype(W, /obj/item/weapon/chisel))
|
else if(istype(W, /obj/item/weapon/chisel))
|
||||||
|
var/beard_style
|
||||||
|
var/hair_style
|
||||||
|
var/chosen_gender = MALE
|
||||||
|
var/chosen_species_name = "Human"
|
||||||
var/chosen_sculpture = input("Choose a sculpture type.", "[name]") as null|anything in available_sculptures
|
var/chosen_sculpture = input("Choose a sculpture type.", "[name]") as null|anything in available_sculptures
|
||||||
|
|
||||||
if(!chosen_sculpture || !Adjacent(user))
|
if(!chosen_sculpture || !Adjacent(user))
|
||||||
return
|
return
|
||||||
|
if (chosen_sculpture == "human woman")
|
||||||
|
chosen_gender = FEMALE
|
||||||
|
if (chosen_sculpture == "vox")
|
||||||
|
chosen_species_name = "Vox"
|
||||||
|
if (chosen_sculpture != "monkey" && chosen_sculpture != "corgi")
|
||||||
|
var/list/species_hair = valid_sprite_accessories(hair_styles_list, null, chosen_species_name)
|
||||||
|
if(species_hair.len)
|
||||||
|
hair_style = input(user, "Select a hair style", "Scuplting Hair") as null|anything in species_hair
|
||||||
|
|
||||||
|
if (chosen_gender != FEMALE)
|
||||||
|
var/list/species_facial_hair = valid_sprite_accessories(facial_hair_styles_list, chosen_gender, chosen_species_name)
|
||||||
|
if(species_facial_hair.len)
|
||||||
|
beard_style = input(user, "Select a beard style", "Sculpting Beard") as null|anything in species_facial_hair
|
||||||
|
if(!Adjacent(user))
|
||||||
|
return
|
||||||
user.visible_message("[user.name] starts sculpting \the [src] with a passion!","You start sculpting \the [src] with a passion!","You hear a repeated knocking sound.")
|
user.visible_message("[user.name] starts sculpting \the [src] with a passion!","You start sculpting \the [src] with a passion!","You hear a repeated knocking sound.")
|
||||||
var/turf/T=get_turf(src)
|
var/turf/T=get_turf(src)
|
||||||
|
|
||||||
if(do_after(user, src, time_to_sculpt))
|
if(do_after(user, src, time_to_sculpt))
|
||||||
new /obj/effect/decal/cleanable/dirt(T)
|
new /obj/effect/decal/cleanable/dirt(T)
|
||||||
var/mannequin_type = available_sculptures[chosen_sculpture]
|
var/mannequin_type = available_sculptures[chosen_sculpture]
|
||||||
var/obj/structure/mannequin/M = new mannequin_type(T)
|
var/obj/structure/mannequin/M = new mannequin_type(T,beard_style,hair_style)
|
||||||
M.anchored = anchored
|
M.anchored = anchored
|
||||||
M.add_fingerprint(user)
|
M.add_fingerprint(user)
|
||||||
user.visible_message("[user.name] finishes \the [M].","You finish \the [M].")
|
user.visible_message("[user.name] finishes \the [M].","You finish \the [M].")
|
||||||
@@ -821,10 +1133,12 @@
|
|||||||
icon_state = "wooden"
|
icon_state = "wooden"
|
||||||
time_to_sculpt = 100
|
time_to_sculpt = 100
|
||||||
available_sculptures = list(
|
available_sculptures = list(
|
||||||
"human" = /obj/structure/mannequin/wood,
|
"human man" = /obj/structure/mannequin/wood,
|
||||||
|
"human woman" = /obj/structure/mannequin/wood/woman,
|
||||||
"fat human" = /obj/structure/mannequin/wood/fat,
|
"fat human" = /obj/structure/mannequin/wood/fat,
|
||||||
"monkey" = /obj/structure/mannequin/wood/monkey,
|
"monkey" = /obj/structure/mannequin/wood/monkey,
|
||||||
"vox" = /obj/structure/mannequin/wood/vox,
|
"vox" = /obj/structure/mannequin/wood/vox,
|
||||||
|
"corgi" = /obj/structure/mannequin/wood/corgi,
|
||||||
)
|
)
|
||||||
autoignition_temperature = AUTOIGNITION_WOOD
|
autoignition_temperature = AUTOIGNITION_WOOD
|
||||||
fire_fuel = 5
|
fire_fuel = 5
|
||||||
@@ -885,6 +1199,8 @@
|
|||||||
|
|
||||||
qdel(src)
|
qdel(src)
|
||||||
|
|
||||||
|
/obj/structure/mannequin/cyber/dissolve()
|
||||||
|
return
|
||||||
|
|
||||||
/obj/structure/mannequin/cyber/ex_act(severity)
|
/obj/structure/mannequin/cyber/ex_act(severity)
|
||||||
switch(severity)
|
switch(severity)
|
||||||
|
|||||||
@@ -625,13 +625,13 @@ var/list/science_goggles_wearers = list()
|
|||||||
disable()
|
disable()
|
||||||
processing_objects.Remove(src)
|
processing_objects.Remove(src)
|
||||||
|
|
||||||
/obj/item/clothing/glasses/emitter/mannequin_equip(var/obj/structure/mannequin/mannequin,var/slot,var/hand_slot)
|
/obj/item/clothing/glasses/emitter/mannequin_equip(var/atom/movable/mannequin,var/slot,var/hand_slot)//can be either a static structure or an hostile mob
|
||||||
if(slot == SLOT_MANNEQUIN_EYES)
|
if(slot == SLOT_MANNEQUIN_EYES)
|
||||||
emitter = mannequin
|
emitter = mannequin
|
||||||
enable()
|
enable()
|
||||||
processing_objects.Add(src)
|
processing_objects.Add(src)
|
||||||
|
|
||||||
/obj/item/clothing/glasses/emitter/mannequin_unequip(var/obj/structure/mannequin/mannequin)
|
/obj/item/clothing/glasses/emitter/mannequin_unequip(var/atom/movable/mannequin)
|
||||||
previous_dir = null
|
previous_dir = null
|
||||||
previous_loc = null
|
previous_loc = null
|
||||||
disable()
|
disable()
|
||||||
|
|||||||
@@ -2111,3 +2111,84 @@ mob/living/carbon/human/isincrit()
|
|||||||
/mob/living/carbon/human/make_meat(location)
|
/mob/living/carbon/human/make_meat(location)
|
||||||
var/ourMeat = new meat_type(location, src)
|
var/ourMeat = new meat_type(location, src)
|
||||||
return ourMeat //Exists due to meat having a special New()
|
return ourMeat //Exists due to meat having a special New()
|
||||||
|
|
||||||
|
|
||||||
|
/mob/living/carbon/human/turn_into_mannequin(var/material = "marble")
|
||||||
|
var/list/valid_mannequin_species = list(
|
||||||
|
"Human",
|
||||||
|
"Voc",
|
||||||
|
"Manifested",
|
||||||
|
)
|
||||||
|
if (!(species.name in valid_mannequin_species))
|
||||||
|
return FALSE
|
||||||
|
|
||||||
|
var/turf/T = get_turf(src)
|
||||||
|
var/obj/structure/mannequin/new_mannequin
|
||||||
|
|
||||||
|
var/list/mannequin_clothing = list(
|
||||||
|
SLOT_MANNEQUIN_ICLOTHING,
|
||||||
|
SLOT_MANNEQUIN_FEET,
|
||||||
|
SLOT_MANNEQUIN_GLOVES,
|
||||||
|
SLOT_MANNEQUIN_EARS,
|
||||||
|
SLOT_MANNEQUIN_OCLOTHING,
|
||||||
|
SLOT_MANNEQUIN_EYES,
|
||||||
|
SLOT_MANNEQUIN_BELT,
|
||||||
|
SLOT_MANNEQUIN_MASK,
|
||||||
|
SLOT_MANNEQUIN_HEAD,
|
||||||
|
SLOT_MANNEQUIN_BACK,
|
||||||
|
SLOT_MANNEQUIN_ID,
|
||||||
|
)
|
||||||
|
|
||||||
|
mannequin_clothing[SLOT_MANNEQUIN_ICLOTHING] = w_uniform
|
||||||
|
mannequin_clothing[SLOT_MANNEQUIN_OCLOTHING] = wear_suit
|
||||||
|
mannequin_clothing[SLOT_MANNEQUIN_HEAD] = head
|
||||||
|
mannequin_clothing[SLOT_MANNEQUIN_MASK] = wear_mask
|
||||||
|
mannequin_clothing[SLOT_MANNEQUIN_BACK] = back
|
||||||
|
mannequin_clothing[SLOT_MANNEQUIN_ID] = wear_id
|
||||||
|
mannequin_clothing[SLOT_MANNEQUIN_BELT] = belt
|
||||||
|
mannequin_clothing[SLOT_MANNEQUIN_GLOVES] = gloves
|
||||||
|
mannequin_clothing[SLOT_MANNEQUIN_FEET] = shoes
|
||||||
|
mannequin_clothing[SLOT_MANNEQUIN_EARS] = ears
|
||||||
|
mannequin_clothing[SLOT_MANNEQUIN_EYES] = glasses
|
||||||
|
|
||||||
|
var/list/mannequin_held_items = list(null, null)
|
||||||
|
|
||||||
|
for (var/i = 1 to mannequin_held_items.len)
|
||||||
|
var/obj/O = held_items[i]
|
||||||
|
if (O)
|
||||||
|
drop_item(O,T,TRUE)
|
||||||
|
mannequin_held_items[i] = O
|
||||||
|
|
||||||
|
for (var/obj/O in get_all_slots())
|
||||||
|
drop_item(O,T,TRUE)
|
||||||
|
|
||||||
|
switch (species.name)
|
||||||
|
if ("Human","Manifested")
|
||||||
|
if (is_fat())
|
||||||
|
switch (material)
|
||||||
|
if ("marble")
|
||||||
|
new_mannequin = new /obj/structure/mannequin/fat(T,my_appearance.f_style,my_appearance.h_style,mannequin_clothing,mannequin_held_items,src)
|
||||||
|
if ("wood")
|
||||||
|
new_mannequin = new /obj/structure/mannequin/wood/fat(T,my_appearance.f_style,my_appearance.h_style,mannequin_clothing,mannequin_held_items,src)
|
||||||
|
else if (gender == FEMALE)
|
||||||
|
switch (material)
|
||||||
|
if ("marble")
|
||||||
|
new_mannequin = new /obj/structure/mannequin/woman(T,my_appearance.f_style,my_appearance.h_style,mannequin_clothing,mannequin_held_items,src)
|
||||||
|
if ("wood")
|
||||||
|
new_mannequin = new /obj/structure/mannequin/wood/woman(T,my_appearance.f_style,my_appearance.h_style,mannequin_clothing,mannequin_held_items,src)
|
||||||
|
else
|
||||||
|
switch (material)
|
||||||
|
if ("marble")
|
||||||
|
new_mannequin = new /obj/structure/mannequin(T,my_appearance.f_style,my_appearance.h_style,mannequin_clothing,mannequin_held_items,src)
|
||||||
|
if ("wood")
|
||||||
|
new_mannequin = new /obj/structure/mannequin/wood(T,my_appearance.f_style,my_appearance.h_style,mannequin_clothing,mannequin_held_items,src)
|
||||||
|
if ("Vox")
|
||||||
|
switch (material)
|
||||||
|
if ("marble")
|
||||||
|
new_mannequin = new /obj/structure/mannequin/vox(T,my_appearance.f_style,my_appearance.h_style,mannequin_clothing,mannequin_held_items,src)
|
||||||
|
if ("wood")
|
||||||
|
new_mannequin = new /obj/structure/mannequin/wood/vox(T,my_appearance.f_style,my_appearance.h_style,mannequin_clothing,mannequin_held_items,src)
|
||||||
|
|
||||||
|
if (new_mannequin)
|
||||||
|
return TRUE
|
||||||
|
return FALSE
|
||||||
|
|||||||
@@ -284,16 +284,16 @@ var/global/list/damage_icon_parts = list()
|
|||||||
if(has_head)
|
if(has_head)
|
||||||
//Eyes
|
//Eyes
|
||||||
if(!skeleton)
|
if(!skeleton)
|
||||||
var/icon/eyes = new/icon('icons/mob/human_face.dmi', species.eyes)
|
var/icon/eyes = new/icon('icons/mob/hair_styles.dmi', species.eyes)
|
||||||
eyes.Blend(rgb(my_appearance.r_eyes, my_appearance.g_eyes, my_appearance.b_eyes), ICON_ADD)
|
eyes.Blend(rgb(my_appearance.r_eyes, my_appearance.g_eyes, my_appearance.b_eyes), ICON_ADD)
|
||||||
stand_icon.Blend(eyes, ICON_OVERLAY)
|
stand_icon.Blend(eyes, ICON_OVERLAY)
|
||||||
|
|
||||||
//Mouth (lipstick!)
|
//Mouth (lipstick!)
|
||||||
if(lip_style)
|
if(lip_style)
|
||||||
stand_icon.Blend(new/icon('icons/mob/human_face.dmi', "lips_[lip_style]_s"), ICON_OVERLAY)
|
stand_icon.Blend(new/icon('icons/mob/hair_styles.dmi', "lips_[lip_style]_s"), ICON_OVERLAY)
|
||||||
|
|
||||||
if(eye_style)
|
if(eye_style)
|
||||||
stand_icon.Blend(new/icon('icons/mob/human_face.dmi', "eyeshadow_[eye_style]_light_s"), ICON_OVERLAY)
|
stand_icon.Blend(new/icon('icons/mob/hair_styles.dmi', "eyeshadow_[eye_style]_light_s"), ICON_OVERLAY)
|
||||||
|
|
||||||
|
|
||||||
//Underwear
|
//Underwear
|
||||||
@@ -330,7 +330,7 @@ var/global/list/damage_icon_parts = list()
|
|||||||
return
|
return
|
||||||
|
|
||||||
//base icons
|
//base icons
|
||||||
var/icon/face_standing = new /icon('icons/mob/human_face.dmi',"bald_s")
|
var/icon/face_standing = new /icon('icons/mob/hair_styles.dmi',"bald_s")
|
||||||
//to_chat(world, "Maskheadhair? [check_hidden_head_flags(MASKHEADHAIR)]")
|
//to_chat(world, "Maskheadhair? [check_hidden_head_flags(MASKHEADHAIR)]")
|
||||||
var/hair_suffix = check_hidden_head_flags(MASKHEADHAIR) ? "s2" : "s" // s2 = cropped icon
|
var/hair_suffix = check_hidden_head_flags(MASKHEADHAIR) ? "s2" : "s" // s2 = cropped icon
|
||||||
|
|
||||||
@@ -1329,7 +1329,7 @@ var/global/list/damage_icon_parts = list()
|
|||||||
// if (gender == FEMALE) g = "f"
|
// if (gender == FEMALE) g = "f"
|
||||||
|
|
||||||
//base icons
|
//base icons
|
||||||
var/icon/face_lying = new /icon('icons/mob/human_face.dmi',"bald_l")
|
var/icon/face_lying = new /icon('icons/mob/hair_styles.dmi',"bald_l")
|
||||||
|
|
||||||
if(my_appearance.f_style)
|
if(my_appearance.f_style)
|
||||||
var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[my_appearance.f_style]
|
var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[my_appearance.f_style]
|
||||||
@@ -1347,15 +1347,15 @@ var/global/list/damage_icon_parts = list()
|
|||||||
|
|
||||||
//Eyes
|
//Eyes
|
||||||
// Note: These used to be in update_face(), and the fact they're here will make it difficult to create a disembodied head
|
// Note: These used to be in update_face(), and the fact they're here will make it difficult to create a disembodied head
|
||||||
var/icon/eyes_l = new/icon('icons/mob/human_face.dmi', "eyes_l")
|
var/icon/eyes_l = new/icon('icons/mob/hair_styles.dmi', "eyes_l")
|
||||||
eyes_l.Blend(rgb(my_appearance.r_eyes, my_appearance.g_eyes, my_appearance.b_eyes), ICON_ADD)
|
eyes_l.Blend(rgb(my_appearance.r_eyes, my_appearance.g_eyes, my_appearance.b_eyes), ICON_ADD)
|
||||||
face_lying.Blend(eyes_l, ICON_OVERLAY)
|
face_lying.Blend(eyes_l, ICON_OVERLAY)
|
||||||
|
|
||||||
if(lip_style)
|
if(lip_style)
|
||||||
face_lying.Blend(new/icon('icons/mob/human_face.dmi', "lips_[lip_style]_l"), ICON_OVERLAY)
|
face_lying.Blend(new/icon('icons/mob/hair_styles.dmi', "lips_[lip_style]_l"), ICON_OVERLAY)
|
||||||
|
|
||||||
if(eye_style)
|
if(eye_style)
|
||||||
face_lying.Blend(new/icon('icons/mob/human_face.dmi', "eyeshadow_[eye_style]_light_l"), ICON_OVERLAY)
|
face_lying.Blend(new/icon('icons/mob/hair_styles.dmi', "eyeshadow_[eye_style]_light_l"), ICON_OVERLAY)
|
||||||
|
|
||||||
var/image/face_lying_image = new /image(icon = face_lying)
|
var/image/face_lying_image = new /image(icon = face_lying)
|
||||||
return face_lying_image
|
return face_lying_image
|
||||||
|
|||||||
@@ -566,3 +566,52 @@
|
|||||||
|
|
||||||
/mob/living/carbon/monkey/can_be_infected()
|
/mob/living/carbon/monkey/can_be_infected()
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
/mob/living/carbon/monkey/turn_into_mannequin(var/material = "marble")
|
||||||
|
if (greaterform != "Human")
|
||||||
|
return FALSE
|
||||||
|
|
||||||
|
var/turf/T = get_turf(src)
|
||||||
|
var/obj/structure/mannequin/new_mannequin
|
||||||
|
|
||||||
|
var/list/mannequin_clothing = list(
|
||||||
|
SLOT_MANNEQUIN_ICLOTHING,
|
||||||
|
SLOT_MANNEQUIN_FEET,
|
||||||
|
SLOT_MANNEQUIN_GLOVES,
|
||||||
|
SLOT_MANNEQUIN_EARS,
|
||||||
|
SLOT_MANNEQUIN_OCLOTHING,
|
||||||
|
SLOT_MANNEQUIN_EYES,
|
||||||
|
SLOT_MANNEQUIN_BELT,
|
||||||
|
SLOT_MANNEQUIN_MASK,
|
||||||
|
SLOT_MANNEQUIN_HEAD,
|
||||||
|
SLOT_MANNEQUIN_BACK,
|
||||||
|
SLOT_MANNEQUIN_ID,
|
||||||
|
)
|
||||||
|
|
||||||
|
mannequin_clothing[SLOT_MANNEQUIN_ICLOTHING] = uniform
|
||||||
|
mannequin_clothing[SLOT_MANNEQUIN_HEAD] = hat
|
||||||
|
mannequin_clothing[SLOT_MANNEQUIN_EYES] = glasses
|
||||||
|
mannequin_clothing[SLOT_MANNEQUIN_MASK] = wear_mask
|
||||||
|
mannequin_clothing[SLOT_MANNEQUIN_BACK] = back
|
||||||
|
|
||||||
|
var/list/mannequin_held_items = list(null, null)
|
||||||
|
|
||||||
|
for (var/i = 1 to mannequin_held_items.len)
|
||||||
|
var/obj/O = held_items[i]
|
||||||
|
if (O)
|
||||||
|
drop_item(O,T,TRUE)
|
||||||
|
mannequin_held_items[i] = O
|
||||||
|
|
||||||
|
for (var/obj/O in get_all_slots())
|
||||||
|
drop_item(O,T,TRUE)
|
||||||
|
|
||||||
|
switch (material)
|
||||||
|
if ("marble")
|
||||||
|
new_mannequin = new /obj/structure/mannequin/monkey(T,null,null,mannequin_clothing,mannequin_held_items,src)
|
||||||
|
if ("wood")
|
||||||
|
new_mannequin = new /obj/structure/mannequin/wood/monkey(T,null,null,mannequin_clothing,mannequin_held_items,src)
|
||||||
|
|
||||||
|
if (new_mannequin)
|
||||||
|
return TRUE
|
||||||
|
return FALSE
|
||||||
|
|
||||||
|
|||||||
@@ -161,7 +161,7 @@
|
|||||||
if(user.stat)
|
if(user.stat)
|
||||||
return
|
return
|
||||||
|
|
||||||
var/dat = "<div align='center'><b>Inventory of [name]</b></div><p>"
|
var/dat
|
||||||
if(inventory_head)
|
if(inventory_head)
|
||||||
dat += "<br><b>Head:</b> [inventory_head] (<a href='?src=\ref[src];remove_inv=head'>Remove</a>)"
|
dat += "<br><b>Head:</b> [inventory_head] (<a href='?src=\ref[src];remove_inv=head'>Remove</a>)"
|
||||||
else
|
else
|
||||||
@@ -171,9 +171,14 @@
|
|||||||
else
|
else
|
||||||
dat += "<br><b>Back:</b> <a href='?src=\ref[src];add_inv=back'>Nothing</a>"
|
dat += "<br><b>Back:</b> <a href='?src=\ref[src];add_inv=back'>Nothing</a>"
|
||||||
|
|
||||||
user << browse(dat, text("window=mob[];size=325x500", real_name))
|
dat += {"
|
||||||
onclose(user, "mob[real_name]")
|
<BR>
|
||||||
return
|
<BR><A href='?src=\ref[user];mach_close=mob\ref[src]'>Close</A>
|
||||||
|
"}
|
||||||
|
|
||||||
|
var/datum/browser/popup = new(user, "corgi\ref[src]", "[src]", 340, 500)
|
||||||
|
popup.set_content(dat)
|
||||||
|
popup.open()
|
||||||
|
|
||||||
/mob/living/simple_animal/corgi/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
/mob/living/simple_animal/corgi/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||||
if(istype(O, /obj/item/weapon/newspaper))
|
if(istype(O, /obj/item/weapon/newspaper))
|
||||||
@@ -210,19 +215,17 @@
|
|||||||
if(usr.stat)
|
if(usr.stat)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
if(!Adjacent(usr) || usr.incapacitated() || !(ishuman(usr) || ismonkey(usr) || isrobot(usr) || isalienadult(usr)))
|
||||||
|
return
|
||||||
|
|
||||||
//Removing from inventory
|
//Removing from inventory
|
||||||
if(href_list["remove_inv"])
|
if(href_list["remove_inv"])
|
||||||
if(!Adjacent(usr) || !(ishuman(usr) || ismonkey(usr) || isrobot(usr) || isalienadult(usr)))
|
|
||||||
return
|
|
||||||
var/remove_from = href_list["remove_inv"]
|
var/remove_from = href_list["remove_inv"]
|
||||||
remove_inventory(remove_from,usr)
|
remove_inventory(remove_from,usr)
|
||||||
show_inv(usr)
|
show_inv(usr)
|
||||||
|
|
||||||
//Adding things to inventory
|
//Adding things to inventory
|
||||||
else if(href_list["add_inv"])
|
else if(href_list["add_inv"])
|
||||||
if(!Adjacent(usr) || !(ishuman(usr) || ismonkey(usr) || isrobot(usr) || isalienadult(usr)))
|
|
||||||
return
|
|
||||||
|
|
||||||
var/add_to = href_list["add_inv"]
|
var/add_to = href_list["add_inv"]
|
||||||
if(!usr.get_active_hand())
|
if(!usr.get_active_hand())
|
||||||
to_chat(usr, "<span class='warning'>You have nothing in your hand to put on its [add_to].</span>")
|
to_chat(usr, "<span class='warning'>You have nothing in your hand to put on its [add_to].</span>")
|
||||||
@@ -245,20 +248,7 @@
|
|||||||
item_to_add.afterattack(src,usr,1)
|
item_to_add.afterattack(src,usr,1)
|
||||||
return
|
return
|
||||||
|
|
||||||
//The objects that corgis can wear on their backs.
|
if( ! ( item_to_add.type in valid_corgi_backpacks ) )
|
||||||
var/list/allowed_types = list(
|
|
||||||
/obj/item/clothing/suit/armor/vest,
|
|
||||||
/obj/item/clothing/suit/armor/vest/security,
|
|
||||||
/obj/item/device/radio,
|
|
||||||
/obj/item/device/radio/off,
|
|
||||||
/obj/item/clothing/suit/cardborg,
|
|
||||||
/obj/item/weapon/tank/oxygen,
|
|
||||||
/obj/item/weapon/tank/air,
|
|
||||||
/obj/item/weapon/extinguisher,
|
|
||||||
/obj/item/clothing/suit/space/rig
|
|
||||||
)
|
|
||||||
|
|
||||||
if( ! ( item_to_add.type in allowed_types ) )
|
|
||||||
to_chat(usr, "You set [item_to_add] on [src]'s back, but \he shakes it off!")
|
to_chat(usr, "You set [item_to_add] on [src]'s back, but \he shakes it off!")
|
||||||
usr.drop_item(item_to_add, get_turf(src))
|
usr.drop_item(item_to_add, get_turf(src))
|
||||||
|
|
||||||
@@ -281,12 +271,7 @@
|
|||||||
else
|
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/corgi/proc/place_on_head(obj/item/item_to_add)
|
/mob/living/simple_animal/corgi/proc/place_on_head(obj/item/item_to_add)
|
||||||
|
|
||||||
|
|
||||||
if(istype(item_to_add,/obj/item/weapon/c4)) // last thing he ever wears, I guess
|
if(istype(item_to_add,/obj/item/weapon/c4)) // last thing he ever wears, I guess
|
||||||
item_to_add.afterattack(src,usr,1)
|
item_to_add.afterattack(src,usr,1)
|
||||||
return
|
return
|
||||||
@@ -300,190 +285,20 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
var/valid = 0
|
if(!(item_to_add.type in valid_corgi_hats))
|
||||||
|
to_chat(usr, "You set [item_to_add] on [src]'s head, but \he shakes it off!")
|
||||||
|
usr.drop_item(item_to_add, src.loc)
|
||||||
|
|
||||||
//Various hats and items (worn on his head) change Ian's behaviour. His attributes are reset when a hat is removed.
|
if(prob(25))
|
||||||
switch(item_to_add.type)
|
step_rand(item_to_add)
|
||||||
if( /obj/item/clothing/glasses/sunglasses, /obj/item/clothing/head/that, /obj/item/clothing/head/collectable/paper,
|
if (ckey == null)
|
||||||
/obj/item/clothing/head/hardhat, /obj/item/clothing/head/collectable/hardhat,/obj/item/clothing/head/hardhat/white, /obj/item/weapon/p_folded/hat )
|
for(var/i in list(1,2,4,8,4,8,4,dir))
|
||||||
valid = 1
|
dir = i
|
||||||
|
sleep(1)
|
||||||
|
return
|
||||||
|
|
||||||
if(/obj/item/clothing/head/helmet/tactical/sec,/obj/item/clothing/head/helmet/tactical/sec/preattached)
|
on_new_hat(item_to_add)//changes the corgi's name, description and behaviour to match their new hat
|
||||||
name = "Sergeant [real_name]"
|
|
||||||
desc = "The ever-loyal, the ever-vigilant."
|
|
||||||
emote_see = list("ignores the chain of command.", "stuns you.")
|
|
||||||
emote_hear = list("stops you right there, criminal scum!")
|
|
||||||
valid = 1
|
|
||||||
|
|
||||||
if(/obj/item/clothing/head/helmet/tactical/swat)
|
|
||||||
name = "Lieutenant [real_name]"
|
|
||||||
desc = "When the going gets ruff..."
|
|
||||||
emote_hear = list("goes dark.", "waits for his retirement tomorrow.")
|
|
||||||
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."
|
|
||||||
emote_see = list("looks for the lamb sauce.", "eats the food.")
|
|
||||||
emote_hear = list("complains that the meal is fucking raw!")
|
|
||||||
valid = 1
|
|
||||||
|
|
||||||
if(/obj/item/clothing/head/caphat, /obj/item/clothing/head/collectable/captain, /obj/item/clothing/head/cap)
|
|
||||||
name = "Captain [real_name]"
|
|
||||||
desc = "Probably better than the last captain."
|
|
||||||
emote_see = list("secures the spare.", "hides the nuke disk.", "abuses his authority.")
|
|
||||||
emote_hear = list("assures the crew he is NOT a comdom.")
|
|
||||||
valid = 1
|
|
||||||
|
|
||||||
if(/obj/item/clothing/head/kitty, /obj/item/clothing/head/kitty/collectable)
|
|
||||||
name = "Runtime"
|
|
||||||
desc = "It's a cute little kitty-cat! Well, he's definitely cute!"
|
|
||||||
emote_see = list("coughs up a furball.", "stretches.")
|
|
||||||
emote_hear = list("purrs.")
|
|
||||||
speak = list("Purrr", "Meow!", "MAOOOOOW!", "HISSSSS!", "MEEEEEEW!")
|
|
||||||
valid = 1
|
|
||||||
|
|
||||||
if(/obj/item/clothing/head/rabbitears, /obj/item/clothing/head/collectable/rabbitears)
|
|
||||||
name = "Hoppy"
|
|
||||||
desc = "This is Hoppy. It's a corgi-er, bunny rabbit?"
|
|
||||||
emote_see = list("twitches its nose.", "hops around a bit.", "eats a doggy carrot.", "jumps in place.")
|
|
||||||
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!"
|
|
||||||
emote_see = list("checks the crew monitoring console.", "stares, unblinking.", "tries to inject you with medicine... But fails!")
|
|
||||||
emote_hear = list("asks you to max the suit sensors.")
|
|
||||||
valid = 1
|
|
||||||
|
|
||||||
if(/obj/item/clothing/head/pirate, /obj/item/clothing/head/collectable/pirate, /obj/item/clothing/head/hgpiratecap)
|
|
||||||
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("Tzar","Vladimir","Chairman")] [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 vangaurdism.", "plans out methods to equally redistribute capital.", "articulates an argument for the primacy of the bourgeoisie.", "develops an economic plan to industrialize the vast rural landscape.")
|
|
||||||
valid = 1
|
|
||||||
|
|
||||||
if(/obj/item/clothing/head/collectable/police)
|
|
||||||
name = "Officer [real_name]"
|
|
||||||
emote_see = list("drools.", "looks for donuts.", "ignores Space Law.")
|
|
||||||
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("Woof!", "Bark!", "EI NATH!", "FORTI GY AMA!")
|
|
||||||
emote_see = list("casts a dastardly spell!", "curses you with a bark!", "summons a steak into his stomach.")
|
|
||||||
valid = 1
|
|
||||||
|
|
||||||
if(/obj/item/clothing/head/cardborg)
|
|
||||||
name = "Borgi"
|
|
||||||
speak = list("Ping!","Beep!","Woof!")
|
|
||||||
emote_see = list("goes rogue.", "sniffs out non-humans.", "waits for a malfunction.", "ignores law 2.", "gets EMP'd.", "doorcrushes you.")
|
|
||||||
desc = "Result of robotics budget cuts."
|
|
||||||
valid = 1
|
|
||||||
|
|
||||||
if(/obj/item/weapon/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, /obj/item/clothing/head/christmas/santahat/red)
|
|
||||||
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."
|
|
||||||
emote_see = list("orders emitter crates.", "declares independence from Nanotrasen.", "acquires insulated gloves.")
|
|
||||||
valid = 1
|
|
||||||
|
|
||||||
if(/obj/item/clothing/head/fedora)
|
|
||||||
name = "Autistic [real_name]"
|
|
||||||
desc = "His paws seem to be covered in what looks like Cheezy Honker dust."
|
|
||||||
emote_hear = list("barks ironically.", "makes you cringe.")
|
|
||||||
emote_see = list("unsheathes katana.", "tips fedora.", "posts on Mongolian basket-weaving forums.", "theorycrafts about nothing.")
|
|
||||||
valid = 1
|
|
||||||
|
|
||||||
if(/obj/item/clothing/head/fez)
|
|
||||||
name = "Doctor Whom"
|
|
||||||
desc = "A time-dog from the planet barkifray."
|
|
||||||
emote_hear = list("barks cleverly.")
|
|
||||||
emote_see = list("fiddles around with a sonic-bone.", "evolves into a hotter version of himself! Er, nevermind.")
|
|
||||||
valid = 1
|
|
||||||
|
|
||||||
if(/obj/item/clothing/head/helmet/space/rig)
|
|
||||||
name = "Station Engineer [real_name]"
|
|
||||||
desc = "Ian wanna cracker!"
|
|
||||||
emote_see = list("scrungulooses.", "activates the SMES units.", "ignores engine safety.", "accidentally plasmafloods.", "delaminates the Supermatter.")
|
|
||||||
valid = 1
|
|
||||||
min_oxy = 0
|
|
||||||
minbodytemp = 0
|
|
||||||
maxbodytemp = 999
|
|
||||||
|
|
||||||
/*
|
|
||||||
if(/obj/item/clothing/head/hardhat/reindeer)
|
|
||||||
name = "[real_name] the red-nosed Corgi"
|
|
||||||
emote_see = list("lights the way.", "illuminates the night sky.", "is bullied by the other reindogs. Poor Ian.")
|
|
||||||
desc = "He has a very shiny nose."
|
|
||||||
SetLuminosity(1)
|
|
||||||
valid = 1
|
|
||||||
*/
|
|
||||||
if(/obj/item/clothing/head/alien_antenna)
|
|
||||||
name = "Al-Ian"
|
|
||||||
desc = "Take us to your dog biscuits!"
|
|
||||||
emote_see = list("drinks sulphuric acid.", "reads your mind.", "kidnaps your cattle.")
|
|
||||||
valid = 1
|
|
||||||
|
|
||||||
if(/obj/item/clothing/head/franken_bolt)
|
|
||||||
name = "Corgenstein's monster"
|
|
||||||
desc = "If I cannot inspire love, I will cause fear! Now fetch me them doggy biscuits."
|
|
||||||
valid = 1
|
|
||||||
|
|
||||||
if(/obj/item/clothing/mask/vamp_fangs)
|
|
||||||
var/obj/item/clothing/mask/vamp_fangs/V = item_to_add
|
|
||||||
if(!V.glowy_fangs)
|
|
||||||
name = "Vlad the Ianpaler"
|
|
||||||
desc = "Listen to them, the children of the night. What music they make!"
|
|
||||||
emote_hear = list("bares his fangs.", "screeches.", "tries to suck some blood.")
|
|
||||||
valid = 1
|
|
||||||
else
|
|
||||||
to_chat(usr, "<span class = 'notice'>The glow of /the [V] startles [real_name]!</span>")
|
|
||||||
|
|
||||||
if(/obj/item/clothing/head/cowboy)
|
|
||||||
name = "Yeehaw Ian"
|
|
||||||
desc = "Are you really just gonna stroll past without saying howdy?"
|
|
||||||
emote_see = list("bullwhips you.", "spins his revolver.")
|
|
||||||
emote_hear = list("complains about city folk.")
|
|
||||||
valid = 1
|
|
||||||
|
|
||||||
|
|
||||||
if(valid)
|
|
||||||
if(usr)
|
if(usr)
|
||||||
usr.visible_message("[usr] puts [item_to_add] on [real_name]'s head. [src] looks at [usr] and barks once.",
|
usr.visible_message("[usr] puts [item_to_add] on [real_name]'s head. [src] looks at [usr] and barks once.",
|
||||||
"You put [item_to_add] on [real_name]'s head. [src] gives you a peculiar look, then wags \his tail once and barks.",
|
"You put [item_to_add] on [real_name]'s head. [src] gives you a peculiar look, then wags \his tail once and barks.",
|
||||||
@@ -494,18 +309,6 @@
|
|||||||
src.inventory_head = item_to_add
|
src.inventory_head = item_to_add
|
||||||
regenerate_icons()
|
regenerate_icons()
|
||||||
|
|
||||||
else
|
|
||||||
to_chat(usr, "You set [item_to_add] on [src]'s head, but \he shakes it off!")
|
|
||||||
usr.drop_item(item_to_add, src.loc)
|
|
||||||
|
|
||||||
if(prob(25))
|
|
||||||
step_rand(item_to_add)
|
|
||||||
if (ckey == null)
|
|
||||||
for(var/i in list(1,2,4,8,4,8,4,dir))
|
|
||||||
dir = i
|
|
||||||
sleep(1)
|
|
||||||
|
|
||||||
return valid
|
|
||||||
|
|
||||||
/mob/living/simple_animal/corgi/proc/spinaroo(var/list/emotes)
|
/mob/living/simple_animal/corgi/proc/spinaroo(var/list/emotes)
|
||||||
if(!stat && !resting && !locked_to)
|
if(!stat && !resting && !locked_to)
|
||||||
@@ -825,6 +628,41 @@
|
|||||||
if(Adjacent(victim) && IsVictim(victim)) //Seriously don't try to rescue the dead.
|
if(Adjacent(victim) && IsVictim(victim)) //Seriously don't try to rescue the dead.
|
||||||
rescue(victim)
|
rescue(victim)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/mob/living/simple_animal/corgi/turn_into_mannequin(var/material = "marble")
|
||||||
|
var/turf/T = get_turf(src)
|
||||||
|
var/obj/structure/mannequin/new_mannequin
|
||||||
|
|
||||||
|
var/list/mannequin_clothing = list(
|
||||||
|
SLOT_MANNEQUIN_ICLOTHING,
|
||||||
|
SLOT_MANNEQUIN_FEET,
|
||||||
|
SLOT_MANNEQUIN_GLOVES,
|
||||||
|
SLOT_MANNEQUIN_EARS,
|
||||||
|
SLOT_MANNEQUIN_OCLOTHING,
|
||||||
|
SLOT_MANNEQUIN_EYES,
|
||||||
|
SLOT_MANNEQUIN_BELT,
|
||||||
|
SLOT_MANNEQUIN_MASK,
|
||||||
|
SLOT_MANNEQUIN_HEAD,
|
||||||
|
SLOT_MANNEQUIN_BACK,
|
||||||
|
SLOT_MANNEQUIN_ID,
|
||||||
|
)
|
||||||
|
|
||||||
|
mannequin_clothing[SLOT_MANNEQUIN_HEAD] = inventory_head
|
||||||
|
mannequin_clothing[SLOT_MANNEQUIN_BACK] = inventory_back
|
||||||
|
remove_inventory("head")
|
||||||
|
remove_inventory("back")
|
||||||
|
|
||||||
|
switch (material)
|
||||||
|
if ("marble")
|
||||||
|
new_mannequin = new /obj/structure/mannequin/corgi(T,null,null,mannequin_clothing,list(null, null),src)
|
||||||
|
if ("wood")
|
||||||
|
new_mannequin = new /obj/structure/mannequin/wood/corgi(T,null,null,mannequin_clothing,list(null, null),src)
|
||||||
|
|
||||||
|
if (new_mannequin)
|
||||||
|
return TRUE
|
||||||
|
return FALSE
|
||||||
|
|
||||||
#undef IDLE
|
#undef IDLE
|
||||||
#undef BEGIN_FOOD_HUNTING
|
#undef BEGIN_FOOD_HUNTING
|
||||||
#undef FOOD_HUNTING
|
#undef FOOD_HUNTING
|
||||||
|
|||||||
216
code/modules/mob/living/simple_animal/friendly/corgi_clothing.dm
Normal file
216
code/modules/mob/living/simple_animal/friendly/corgi_clothing.dm
Normal file
@@ -0,0 +1,216 @@
|
|||||||
|
|
||||||
|
//lists used by both corgis and mannequins
|
||||||
|
|
||||||
|
var/list/valid_corgi_hats = list(
|
||||||
|
/obj/item/clothing/head/collectable/tophat,
|
||||||
|
/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/clothing/head/helmet/tactical/sec,
|
||||||
|
/obj/item/clothing/head/helmet/tactical/sec/preattached,
|
||||||
|
/obj/item/clothing/head/helmet/tactical/swat,
|
||||||
|
/obj/item/clothing/head/chefhat,
|
||||||
|
/obj/item/clothing/head/collectable/chef,
|
||||||
|
/obj/item/clothing/head/caphat,
|
||||||
|
/obj/item/clothing/head/collectable/captain,
|
||||||
|
/obj/item/clothing/head/cap,
|
||||||
|
/obj/item/clothing/head/kitty,
|
||||||
|
/obj/item/clothing/head/kitty/collectable,
|
||||||
|
/obj/item/clothing/head/rabbitears,
|
||||||
|
/obj/item/clothing/head/collectable/rabbitears,
|
||||||
|
/obj/item/clothing/head/beret,
|
||||||
|
/obj/item/clothing/head/collectable/beret,
|
||||||
|
/obj/item/clothing/head/det_hat,
|
||||||
|
/obj/item/clothing/head/nursehat,
|
||||||
|
/obj/item/clothing/head/pirate,
|
||||||
|
/obj/item/clothing/head/collectable/pirate,
|
||||||
|
/obj/item/clothing/head/hgpiratecap,
|
||||||
|
/obj/item/clothing/head/ushanka,
|
||||||
|
/obj/item/clothing/head/collectable/police,
|
||||||
|
/obj/item/clothing/head/wizard/fake,
|
||||||
|
/obj/item/clothing/head/wizard,
|
||||||
|
/obj/item/clothing/head/collectable/wizard,
|
||||||
|
/obj/item/clothing/head/cardborg,
|
||||||
|
/obj/item/clothing/head/helmet/space/santahat,
|
||||||
|
/obj/item/clothing/head/christmas/santahat/red,
|
||||||
|
/obj/item/clothing/head/soft,
|
||||||
|
/obj/item/clothing/head/fedora,
|
||||||
|
/obj/item/clothing/head/fez,
|
||||||
|
/obj/item/clothing/head/helmet/space/rig,
|
||||||
|
/obj/item/clothing/head/alien_antenna,
|
||||||
|
/obj/item/clothing/head/franken_bolt,
|
||||||
|
/obj/item/clothing/mask/vamp_fangs,
|
||||||
|
/obj/item/clothing/head/cowboy,
|
||||||
|
/obj/item/clothing/glasses/sunglasses,
|
||||||
|
/obj/item/weapon/p_folded/hat,
|
||||||
|
/obj/item/weapon/bedsheet,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
var/list/valid_corgi_backpacks = list(
|
||||||
|
/obj/item/clothing/suit/armor/vest,
|
||||||
|
/obj/item/clothing/suit/armor/vest/security,
|
||||||
|
/obj/item/device/radio,
|
||||||
|
/obj/item/device/radio/off,
|
||||||
|
/obj/item/clothing/suit/cardborg,
|
||||||
|
/obj/item/weapon/tank/oxygen,
|
||||||
|
/obj/item/weapon/tank/air,
|
||||||
|
/obj/item/weapon/extinguisher,
|
||||||
|
/obj/item/clothing/suit/space/rig,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
/mob/living/simple_animal/corgi/proc/on_new_hat(obj/item/item_to_add)
|
||||||
|
if (!item_to_add)
|
||||||
|
return
|
||||||
|
switch(item_to_add.type)
|
||||||
|
if(/obj/item/clothing/head/helmet/tactical/sec,/obj/item/clothing/head/helmet/tactical/sec/preattached)
|
||||||
|
name = "Sergeant [real_name]"
|
||||||
|
desc = "The ever-loyal, the ever-vigilant."
|
||||||
|
emote_see = list("ignores the chain of command.", "stuns you.")
|
||||||
|
emote_hear = list("stops you right there, criminal scum!")
|
||||||
|
|
||||||
|
if(/obj/item/clothing/head/helmet/tactical/swat)
|
||||||
|
name = "Lieutenant [real_name]"
|
||||||
|
desc = "When the going gets ruff..."
|
||||||
|
emote_hear = list("goes dark.", "waits for his retirement tomorrow.")
|
||||||
|
|
||||||
|
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."
|
||||||
|
emote_see = list("looks for the lamb sauce.", "eats the food.")
|
||||||
|
emote_hear = list("complains that the meal is fucking raw!")
|
||||||
|
|
||||||
|
if(/obj/item/clothing/head/caphat, /obj/item/clothing/head/collectable/captain, /obj/item/clothing/head/cap)
|
||||||
|
name = "Captain [real_name]"
|
||||||
|
desc = "Probably better than the last captain."
|
||||||
|
emote_see = list("secures the spare.", "hides the nuke disk.", "abuses his authority.")
|
||||||
|
emote_hear = list("assures the crew he is NOT a comdom.")
|
||||||
|
|
||||||
|
if(/obj/item/clothing/head/kitty, /obj/item/clothing/head/kitty/collectable)
|
||||||
|
name = "Runtime"
|
||||||
|
desc = "It's a cute little kitty-cat! Well, he's definitely cute!"
|
||||||
|
emote_see = list("coughs up a furball.", "stretches.")
|
||||||
|
emote_hear = list("purrs.")
|
||||||
|
speak = list("Purrr", "Meow!", "MAOOOOOW!", "HISSSSS!", "MEEEEEEW!")
|
||||||
|
|
||||||
|
if(/obj/item/clothing/head/rabbitears, /obj/item/clothing/head/collectable/rabbitears)
|
||||||
|
name = "Hoppy"
|
||||||
|
desc = "This is Hoppy. It's a corgi-er, bunny rabbit?"
|
||||||
|
emote_see = list("twitches its nose.", "hops around a bit.", "eats a doggy carrot.", "jumps in place.")
|
||||||
|
|
||||||
|
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.")
|
||||||
|
|
||||||
|
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.")
|
||||||
|
|
||||||
|
if(/obj/item/clothing/head/nursehat)
|
||||||
|
name = "Nurse [real_name]"
|
||||||
|
desc = "[name] needs 100cc of beef jerky... STAT!"
|
||||||
|
emote_see = list("checks the crew monitoring console.", "stares, unblinking.", "tries to inject you with medicine... But fails!")
|
||||||
|
emote_hear = list("asks you to max the suit sensors.")
|
||||||
|
|
||||||
|
if(/obj/item/clothing/head/pirate, /obj/item/clothing/head/collectable/pirate, /obj/item/clothing/head/hgpiratecap)
|
||||||
|
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!")
|
||||||
|
|
||||||
|
if(/obj/item/clothing/head/ushanka)
|
||||||
|
name = "[pick("Tzar","Vladimir","Chairman")] [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 vangaurdism.", "plans out methods to equally redistribute capital.", "articulates an argument for the primacy of the bourgeoisie.", "develops an economic plan to industrialize the vast rural landscape.")
|
||||||
|
|
||||||
|
if(/obj/item/clothing/head/collectable/police)
|
||||||
|
name = "Officer [real_name]"
|
||||||
|
emote_see = list("drools.", "looks for donuts.", "ignores Space Law.")
|
||||||
|
desc = "Stop right there, criminal scum!"
|
||||||
|
|
||||||
|
if(/obj/item/clothing/head/wizard/fake, /obj/item/clothing/head/wizard, /obj/item/clothing/head/collectable/wizard)
|
||||||
|
name = "Grandwizard [real_name]"
|
||||||
|
speak = list("Woof!", "Bark!", "EI NATH!", "FORTI GY AMA!")
|
||||||
|
emote_see = list("casts a dastardly spell!", "curses you with a bark!", "summons a steak into his stomach.")
|
||||||
|
|
||||||
|
if(/obj/item/clothing/head/cardborg)
|
||||||
|
name = "Borgi"
|
||||||
|
speak = list("Ping!","Beep!","Woof!")
|
||||||
|
emote_see = list("goes rogue.", "sniffs out non-humans.", "waits for a malfunction.", "ignores law 2.", "gets EMP'd.", "doorcrushes you.")
|
||||||
|
desc = "Result of robotics budget cuts."
|
||||||
|
|
||||||
|
if(/obj/item/weapon/bedsheet)
|
||||||
|
name = "\improper Ghost"
|
||||||
|
speak = list("WoooOOOooo~","AuuuuuUuUuUuUuUuUuu~")
|
||||||
|
emote_see = list("stumbles around.", "shivers.")
|
||||||
|
emote_hear = list("howls.","groans.")
|
||||||
|
desc = "Spooky!"
|
||||||
|
|
||||||
|
if(/obj/item/clothing/head/helmet/space/santahat, /obj/item/clothing/head/christmas/santahat/red)
|
||||||
|
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."
|
||||||
|
|
||||||
|
if(/obj/item/clothing/head/soft)
|
||||||
|
name = "Corgi Tech [real_name]"
|
||||||
|
desc = "The reason your yellow gloves have chew-marks."
|
||||||
|
emote_see = list("orders emitter crates.", "declares independence from Nanotrasen.", "acquires insulated gloves.")
|
||||||
|
|
||||||
|
if(/obj/item/clothing/head/fedora)
|
||||||
|
name = "Autistic [real_name]"
|
||||||
|
desc = "His paws seem to be covered in what looks like Cheezy Honker dust."
|
||||||
|
emote_hear = list("barks ironically.", "makes you cringe.")
|
||||||
|
emote_see = list("unsheathes katana.", "tips fedora.", "posts on Mongolian basket-weaving forums.", "theorycrafts about nothing.")
|
||||||
|
|
||||||
|
if(/obj/item/clothing/head/fez)
|
||||||
|
name = "Doctor Whom"
|
||||||
|
desc = "A time-dog from the planet barkifray."
|
||||||
|
emote_hear = list("barks cleverly.")
|
||||||
|
emote_see = list("fiddles around with a sonic-bone.", "evolves into a hotter version of himself! Er, nevermind.")
|
||||||
|
|
||||||
|
if(/obj/item/clothing/head/helmet/space/rig)
|
||||||
|
name = "Station Engineer [real_name]"
|
||||||
|
desc = "Ian wanna cracker!"
|
||||||
|
emote_see = list("scrungulooses.", "activates the SMES units.", "ignores engine safety.", "accidentally plasmafloods.", "delaminates the Supermatter.")
|
||||||
|
min_oxy = 0
|
||||||
|
minbodytemp = 0
|
||||||
|
maxbodytemp = 999
|
||||||
|
|
||||||
|
/*
|
||||||
|
if(/obj/item/clothing/head/hardhat/reindeer)
|
||||||
|
name = "[real_name] the red-nosed Corgi"
|
||||||
|
emote_see = list("lights the way.", "illuminates the night sky.", "is bullied by the other reindogs. Poor Ian.")
|
||||||
|
desc = "He has a very shiny nose."
|
||||||
|
SetLuminosity(1)
|
||||||
|
*/
|
||||||
|
if(/obj/item/clothing/head/alien_antenna)
|
||||||
|
name = "Al-Ian"
|
||||||
|
desc = "Take us to your dog biscuits!"
|
||||||
|
emote_see = list("drinks sulphuric acid.", "reads your mind.", "kidnaps your cattle.")
|
||||||
|
|
||||||
|
if(/obj/item/clothing/head/franken_bolt)
|
||||||
|
name = "Corgenstein's monster"
|
||||||
|
desc = "If I cannot inspire love, I will cause fear! Now fetch me them doggy biscuits."
|
||||||
|
|
||||||
|
if(/obj/item/clothing/mask/vamp_fangs)
|
||||||
|
var/obj/item/clothing/mask/vamp_fangs/V = item_to_add
|
||||||
|
if(!V.glowy_fangs)
|
||||||
|
name = "Vlad the Ianpaler"
|
||||||
|
desc = "Listen to them, the children of the night. What music they make!"
|
||||||
|
emote_hear = list("bares his fangs.", "screeches.", "tries to suck some blood.")
|
||||||
|
else
|
||||||
|
to_chat(usr, "<span class = 'notice'>The glow of /the [V] startles [real_name]!</span>")
|
||||||
|
|
||||||
|
if(/obj/item/clothing/head/cowboy)
|
||||||
|
name = "Yeehaw Ian"
|
||||||
|
desc = "Are you really just gonna stroll past without saying howdy?"
|
||||||
|
emote_see = list("bullwhips you.", "spins his revolver.")
|
||||||
|
emote_hear = list("complains about city folk.")
|
||||||
@@ -353,11 +353,11 @@
|
|||||||
|
|
||||||
var/target_turf = get_turf(ttarget)
|
var/target_turf = get_turf(ttarget)
|
||||||
if(rapid)
|
if(rapid)
|
||||||
|
spawn()
|
||||||
|
TryToShoot(target_turf, ttarget)
|
||||||
sleep(1)
|
sleep(1)
|
||||||
TryToShoot(target_turf, ttarget)
|
TryToShoot(target_turf, ttarget)
|
||||||
sleep(3)
|
sleep(1)
|
||||||
TryToShoot(target_turf, ttarget)
|
|
||||||
sleep(3)
|
|
||||||
TryToShoot(target_turf, ttarget)
|
TryToShoot(target_turf, ttarget)
|
||||||
else
|
else
|
||||||
TryToShoot(target_turf, ttarget)
|
TryToShoot(target_turf, ttarget)
|
||||||
@@ -375,24 +375,28 @@
|
|||||||
if(casingtype)
|
if(casingtype)
|
||||||
new casingtype(get_turf(src),1)// empty casing
|
new casingtype(get_turf(src),1)// empty casing
|
||||||
|
|
||||||
/mob/living/simple_animal/hostile/proc/Shoot(var/atom/target, var/atom/start, var/mob/user, var/bullet = 0)
|
/mob/living/simple_animal/hostile/proc/Shoot(var/atom/target_turf, var/atom/start, var/mob/user, var/bullet = 0)
|
||||||
if(target == start)
|
if(target_turf == start)
|
||||||
return 0
|
return 0
|
||||||
if(!istype(target, /turf))
|
if(!istype(target_turf, /turf))
|
||||||
return 0
|
return 0
|
||||||
|
var/atom/original_atom
|
||||||
|
if (!target)
|
||||||
|
original_atom = target_turf
|
||||||
|
else
|
||||||
|
original_atom = target
|
||||||
|
|
||||||
//Friendly Fire check (don't bother if the mob is controlled by a player)
|
//Friendly Fire check (don't bother if the mob is controlled by a player)
|
||||||
if(!friendly_fire && !ckey)
|
if(!friendly_fire && !ckey)
|
||||||
var/obj/item/projectile/friendlyCheck/fC = new /obj/item/projectile/friendlyCheck(user.loc)
|
var/obj/item/projectile/friendlyCheck/fC = new /obj/item/projectile/friendlyCheck(user.loc)
|
||||||
fC.current = target
|
fC.current = target
|
||||||
var/turf/T = get_turf(user)
|
var/turf/T = get_turf(user)
|
||||||
var/turf/U = get_turf(target)
|
fC.original = original_atom
|
||||||
fC.original = target
|
fC.target = target_turf
|
||||||
fC.target = U
|
|
||||||
fC.current = T
|
fC.current = T
|
||||||
fC.starting = T
|
fC.starting = T
|
||||||
fC.yo = target.y - start.y
|
fC.yo = target_turf.y - start.y
|
||||||
fC.xo = target.x - start.x
|
fC.xo = target_turf.x - start.x
|
||||||
|
|
||||||
var/atom/potentialImpact = fC.process()
|
var/atom/potentialImpact = fC.process()
|
||||||
if(potentialImpact && !CanAttack(potentialImpact))
|
if(potentialImpact && !CanAttack(potentialImpact))
|
||||||
@@ -409,16 +413,15 @@
|
|||||||
if(projectilesound)
|
if(projectilesound)
|
||||||
playsound(user, projectilesound, 100, 1)
|
playsound(user, projectilesound, 100, 1)
|
||||||
|
|
||||||
A.current = target
|
A.current = target_turf
|
||||||
|
|
||||||
var/turf/T = get_turf(src)
|
var/turf/T = get_turf(src)
|
||||||
var/turf/U = get_turf(target)
|
A.original = original_atom
|
||||||
A.original = target
|
A.target = target_turf
|
||||||
A.target = U
|
|
||||||
A.current = T
|
A.current = T
|
||||||
A.starting = T
|
A.starting = T
|
||||||
A.yo = target.y - start.y
|
A.yo = target_turf.y - start.y
|
||||||
A.xo = target.x - start.x
|
A.xo = target_turf.x - start.x
|
||||||
spawn()
|
spawn()
|
||||||
A.OnFired()
|
A.OnFired()
|
||||||
A.process()
|
A.process()
|
||||||
|
|||||||
@@ -366,9 +366,9 @@
|
|||||||
|
|
||||||
/mob/living/simple_animal/hostile/mechahitler/death(var/gibbed = FALSE)
|
/mob/living/simple_animal/hostile/mechahitler/death(var/gibbed = FALSE)
|
||||||
set waitfor = 0
|
set waitfor = 0
|
||||||
|
say("Eva, auf wiedersehen!")
|
||||||
..(TRUE)
|
..(TRUE)
|
||||||
dir = 2
|
dir = 2
|
||||||
say("Eva, auf wiedersehen!")
|
|
||||||
ranged = 0
|
ranged = 0
|
||||||
sleep(10)
|
sleep(10)
|
||||||
var/turf/eloc = get_turf(loc)
|
var/turf/eloc = get_turf(loc)
|
||||||
|
|||||||
@@ -35,20 +35,291 @@
|
|||||||
mob_property_flags = MOB_CONSTRUCT
|
mob_property_flags = MOB_CONSTRUCT
|
||||||
faction = "mannequin"
|
faction = "mannequin"
|
||||||
|
|
||||||
|
var/obj/item/equipped_melee_weapon = null
|
||||||
|
var/obj/item/equipped_ranged_weapon = null
|
||||||
var/list/clothing = list()
|
var/list/clothing = list()
|
||||||
|
|
||||||
|
var/timer = 80 //in seconds
|
||||||
|
var/mob/living/captured_mob
|
||||||
|
var/intialTox = 0
|
||||||
|
var/intialFire = 0
|
||||||
|
var/intialBrute = 0
|
||||||
|
var/intialOxy = 0
|
||||||
|
var/dissolving = FALSE
|
||||||
|
|
||||||
|
var/additional_damage = 0//tracking how much damage we took
|
||||||
|
|
||||||
|
|
||||||
|
/mob/living/simple_animal/hostile/mannequin/New()
|
||||||
|
..()
|
||||||
|
clothing = list(
|
||||||
|
SLOT_MANNEQUIN_ICLOTHING,
|
||||||
|
SLOT_MANNEQUIN_FEET,
|
||||||
|
SLOT_MANNEQUIN_GLOVES,
|
||||||
|
SLOT_MANNEQUIN_EARS,
|
||||||
|
SLOT_MANNEQUIN_OCLOTHING,
|
||||||
|
SLOT_MANNEQUIN_EYES,
|
||||||
|
SLOT_MANNEQUIN_BELT,
|
||||||
|
SLOT_MANNEQUIN_MASK,
|
||||||
|
SLOT_MANNEQUIN_HEAD,
|
||||||
|
SLOT_MANNEQUIN_BACK,
|
||||||
|
SLOT_MANNEQUIN_ID,
|
||||||
|
)
|
||||||
|
|
||||||
|
/mob/living/simple_animal/hostile/mannequin/Destroy()
|
||||||
|
equipped_melee_weapon = null
|
||||||
|
equipped_ranged_weapon = null
|
||||||
|
held_items.len = 0
|
||||||
|
clothing.len = 0
|
||||||
|
..()
|
||||||
|
|
||||||
|
/mob/living/simple_animal/hostile/mannequin/Life()
|
||||||
|
. = ..()
|
||||||
|
if (.)
|
||||||
|
if (dissolving)
|
||||||
|
return
|
||||||
|
timer--
|
||||||
|
if (captured_mob)
|
||||||
|
captured_mob.setToxLoss(intialTox)
|
||||||
|
captured_mob.adjustFireLoss(intialFire - captured_mob.getFireLoss())
|
||||||
|
captured_mob.adjustBruteLoss(intialBrute - captured_mob.getBruteLoss())
|
||||||
|
captured_mob.setOxyLoss(intialOxy)
|
||||||
|
if (timer >= 5)
|
||||||
|
captured_mob.Paralyse(2)
|
||||||
|
if (timer <= 0)
|
||||||
|
freeCaptive()
|
||||||
|
qdel(src)
|
||||||
|
|
||||||
|
/mob/living/simple_animal/hostile/mannequin/proc/dissolve()
|
||||||
|
if(dissolving)
|
||||||
|
return
|
||||||
|
|
||||||
|
visible_message("<span class='notice'>The statue's surface begins cracking and dissolving!</span>")
|
||||||
|
|
||||||
|
dissolving = TRUE
|
||||||
|
|
||||||
|
spawn(10)
|
||||||
|
for(var/i=1 to 5)
|
||||||
|
for(var/mob/living/L in contents)
|
||||||
|
L.adjustBruteLoss(10)
|
||||||
|
if (L.health <= 0)
|
||||||
|
L.mutations |= M_NOCLONE
|
||||||
|
|
||||||
|
if(ishuman(L) && !(M_HUSK in L.mutations))
|
||||||
|
var/mob/living/carbon/human/H = L
|
||||||
|
H.ChangeToHusk()
|
||||||
|
sleep(10)
|
||||||
|
|
||||||
|
breakDown()
|
||||||
|
qdel(src)
|
||||||
|
|
||||||
|
|
||||||
/mob/living/simple_animal/hostile/mannequin/death(var/gibbed = FALSE)
|
/mob/living/simple_animal/hostile/mannequin/death(var/gibbed = FALSE)
|
||||||
..(TRUE)
|
..(TRUE)
|
||||||
breakDown()
|
breakDown()
|
||||||
qdel(src)
|
qdel(src)
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////START - MANNEQUIN DEFENSE////////////////////////////////////////////
|
||||||
|
|
||||||
|
/mob/living/simple_animal/hostile/mannequin/bullet_act(var/obj/item/projectile/P, var/def_zone)
|
||||||
|
//ablative armor
|
||||||
|
for (var/obj/item/clothing/suit/armor/laserproof/ablative in clothing)
|
||||||
|
if(istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam) || istype(P, /obj/item/projectile/forcebolt) || istype(P, /obj/item/projectile/change))
|
||||||
|
var/reflectchance = ablative.basereflectchance - round(P.damage/3)
|
||||||
|
if(!(def_zone in list(LIMB_CHEST, LIMB_GROIN)))
|
||||||
|
reflectchance /= 2
|
||||||
|
if(prob(reflectchance))
|
||||||
|
visible_message("<span class='danger'>The [P.name] gets reflected by [src]'s [ablative.name]!</span>")
|
||||||
|
|
||||||
|
if(!istype(P, /obj/item/projectile/beam)) //beam has its own rebound-call-logic
|
||||||
|
P.reflected = 1
|
||||||
|
P.rebound(src)
|
||||||
|
|
||||||
|
return PROJECTILE_COLLISION_REBOUND // complete projectile permutation
|
||||||
|
|
||||||
|
//shield
|
||||||
|
for(var/obj/item/I in clothing)
|
||||||
|
if(I.IsShield() && I.on_block(P.damage, P))
|
||||||
|
P.on_hit(src, 100)
|
||||||
|
return PROJECTILE_COLLISION_BLOCKED
|
||||||
|
|
||||||
|
var/absorb = run_armor_check(def_zone, P.flag, armor_penetration = P.armor_penetration)
|
||||||
|
if(absorb >= 100)
|
||||||
|
P.on_hit(src,2)
|
||||||
|
return PROJECTILE_COLLISION_BLOCKED
|
||||||
|
if(!P.nodamage)
|
||||||
|
var/damage = run_armor_absorb(def_zone, P.flag, P.damage)
|
||||||
|
apply_damage(damage, P.damage_type, def_zone, absorb, P.is_sharp(), used_weapon = P)
|
||||||
|
P.on_hit(src, absorb)
|
||||||
|
return PROJECTILE_COLLISION_DEFAULT
|
||||||
|
|
||||||
|
/mob/living/simple_animal/hostile/mannequin/proc/checkarmor(var/def_zone, var/type)
|
||||||
|
if(!type)
|
||||||
|
return 0
|
||||||
|
var/protection = 0
|
||||||
|
var/list/body_parts = list(
|
||||||
|
clothing[SLOT_MANNEQUIN_HEAD],
|
||||||
|
clothing[SLOT_MANNEQUIN_MASK],
|
||||||
|
clothing[SLOT_MANNEQUIN_OCLOTHING],
|
||||||
|
clothing[SLOT_MANNEQUIN_ICLOTHING],
|
||||||
|
clothing[SLOT_MANNEQUIN_GLOVES],
|
||||||
|
clothing[SLOT_MANNEQUIN_FEET]
|
||||||
|
)
|
||||||
|
for(var/bp in body_parts)
|
||||||
|
if(!bp)
|
||||||
|
continue
|
||||||
|
if(bp && istype(bp ,/obj/item/clothing))
|
||||||
|
var/obj/item/clothing/C = bp
|
||||||
|
if(C.body_parts_covered & limb_define_to_part_define(def_zone))
|
||||||
|
protection += C.get_armor(type)
|
||||||
|
for(var/obj/item/clothing/accessory/A in C.accessories)
|
||||||
|
if(A.body_parts_covered & limb_define_to_part_define(def_zone))
|
||||||
|
protection += A.get_armor(type)
|
||||||
|
if(istype(loc, /obj/mecha))
|
||||||
|
var/obj/mecha/M = loc
|
||||||
|
protection += M.rad_protection
|
||||||
|
return protection
|
||||||
|
|
||||||
|
/mob/living/simple_animal/hostile/mannequin/getarmor(var/def_zone, var/type)
|
||||||
|
if(def_zone)
|
||||||
|
return checkarmor(ran_zone(def_zone), type)
|
||||||
|
|
||||||
|
var/armorval = 0
|
||||||
|
var/limbnum = 0
|
||||||
|
for(var/slot in clothing)
|
||||||
|
armorval += checkarmor(slot, type)
|
||||||
|
limbnum++
|
||||||
|
return (armorval/max(limbnum, 1))
|
||||||
|
|
||||||
|
/mob/living/simple_animal/hostile/mannequin/getarmorabsorb(var/def_zone, var/type)
|
||||||
|
if(def_zone)
|
||||||
|
return checkarmorabsorb(ran_zone(def_zone), type)
|
||||||
|
|
||||||
|
var/armorval = 0
|
||||||
|
var/limbnum = 0
|
||||||
|
for(var/slot in clothing)
|
||||||
|
armorval += checkarmorabsorb(slot, type)
|
||||||
|
limbnum++
|
||||||
|
return (armorval/max(limbnum, 1))
|
||||||
|
|
||||||
|
/mob/living/simple_animal/hostile/mannequin/proc/checkarmorabsorb(var/def_zone, var/type)
|
||||||
|
if(!type)
|
||||||
|
return 0
|
||||||
|
var/protection = 0
|
||||||
|
var/list/body_parts = list(
|
||||||
|
clothing[SLOT_MANNEQUIN_HEAD],
|
||||||
|
clothing[SLOT_MANNEQUIN_MASK],
|
||||||
|
clothing[SLOT_MANNEQUIN_OCLOTHING],
|
||||||
|
clothing[SLOT_MANNEQUIN_ICLOTHING],
|
||||||
|
clothing[SLOT_MANNEQUIN_GLOVES],
|
||||||
|
clothing[SLOT_MANNEQUIN_FEET]
|
||||||
|
)
|
||||||
|
for(var/bp in body_parts)
|
||||||
|
if(istype(bp, /obj/item/clothing))
|
||||||
|
var/obj/item/clothing/C = bp
|
||||||
|
if(C.body_parts_covered & limb_define_to_part_define(def_zone))
|
||||||
|
protection += C.get_armor_absorb(type)
|
||||||
|
for(var/obj/item/clothing/accessory/A in C.accessories)
|
||||||
|
if(A.body_parts_covered & limb_define_to_part_define(def_zone))
|
||||||
|
protection += A.get_armor_absorb(type)
|
||||||
|
return protection
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////END - MANNEQUIN DEFENSE////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
/mob/living/simple_animal/hostile/mannequin/proc/freeCaptive()
|
||||||
|
if (!captured_mob)
|
||||||
|
return
|
||||||
|
captured_mob.forceMove(loc)
|
||||||
|
for(var/cloth in clothing)
|
||||||
|
var/obj/O = clothing[cloth]
|
||||||
|
if (O)
|
||||||
|
switch(cloth)
|
||||||
|
if(SLOT_MANNEQUIN_ICLOTHING)
|
||||||
|
captured_mob.equip_to_slot_or_drop(O, slot_w_uniform)
|
||||||
|
if(SLOT_MANNEQUIN_FEET)
|
||||||
|
captured_mob.equip_to_slot_or_drop(O, slot_shoes)
|
||||||
|
if(SLOT_MANNEQUIN_GLOVES)
|
||||||
|
captured_mob.equip_to_slot_or_drop(O, slot_gloves)
|
||||||
|
if(SLOT_MANNEQUIN_EARS)
|
||||||
|
captured_mob.equip_to_slot_or_drop(O, slot_ears)
|
||||||
|
if(SLOT_MANNEQUIN_OCLOTHING)
|
||||||
|
captured_mob.equip_to_slot_or_drop(O, slot_wear_suit)
|
||||||
|
if(SLOT_MANNEQUIN_EYES)
|
||||||
|
captured_mob.equip_to_slot_or_drop(O, slot_glasses)
|
||||||
|
if(SLOT_MANNEQUIN_BELT)
|
||||||
|
captured_mob.equip_to_slot_or_drop(O, slot_belt)
|
||||||
|
if(SLOT_MANNEQUIN_MASK)
|
||||||
|
captured_mob.equip_to_slot_or_drop(O, slot_wear_mask)
|
||||||
|
if(SLOT_MANNEQUIN_HEAD)
|
||||||
|
if (iscorgi(captured_mob))
|
||||||
|
var/mob/living/simple_animal/corgi/corgi = captured_mob
|
||||||
|
O.forceMove(captured_mob)
|
||||||
|
corgi.inventory_back = O
|
||||||
|
corgi.regenerate_icons()
|
||||||
|
else
|
||||||
|
captured_mob.equip_to_slot_or_drop(O, slot_head)
|
||||||
|
if(SLOT_MANNEQUIN_BACK)
|
||||||
|
if (iscorgi(captured_mob))
|
||||||
|
var/mob/living/simple_animal/corgi/corgi = captured_mob
|
||||||
|
corgi.place_on_head(O)
|
||||||
|
else
|
||||||
|
captured_mob.equip_to_slot_or_drop(O, slot_back)
|
||||||
|
if(SLOT_MANNEQUIN_ID)
|
||||||
|
captured_mob.equip_to_slot_or_drop(O, slot_wear_id)
|
||||||
|
clothing.len = 0
|
||||||
|
|
||||||
|
for(var/index = 1 to held_items.len)
|
||||||
|
var/obj/item/tool = held_items[index]
|
||||||
|
if (!tool)
|
||||||
|
continue
|
||||||
|
captured_mob.put_in_hands(tool)
|
||||||
|
held_items.len = 0
|
||||||
|
|
||||||
|
captured_mob.dir = dir
|
||||||
|
captured_mob.apply_damage(additional_damage)
|
||||||
|
|
||||||
/mob/living/simple_animal/hostile/mannequin/proc/breakDown()
|
/mob/living/simple_animal/hostile/mannequin/proc/breakDown()
|
||||||
visible_message("<span class='warning'><b>[src]</b> collapses!</span>")
|
visible_message("<span class='warning'><b>[src]</b> collapses!</span>")
|
||||||
playsound(loc, 'sound/items/egg_squash.ogg', 100, 1)
|
|
||||||
for(var/obj/cloth in clothing)
|
|
||||||
cloth.forceMove(loc)
|
|
||||||
clothing -= cloth
|
|
||||||
new /obj/effect/decal/cleanable/dirt(loc)
|
new /obj/effect/decal/cleanable/dirt(loc)
|
||||||
|
playsound(loc, 'sound/effects/stone_crumble.ogg', 100, 1)
|
||||||
|
if (captured_mob)
|
||||||
|
if (dissolving)
|
||||||
|
freeCaptive()
|
||||||
|
return
|
||||||
|
else
|
||||||
|
captured_mob.gib()
|
||||||
|
for(var/cloth in clothing)
|
||||||
|
if(clothing[cloth])
|
||||||
|
var/obj/item/cloth_to_drop = clothing[cloth]
|
||||||
|
cloth_to_drop.mannequin_unequip(src)
|
||||||
|
cloth_to_drop.forceMove(loc)
|
||||||
|
clothing[cloth] = null
|
||||||
|
for(var/obj/item/item_to_drop in held_items)
|
||||||
|
item_to_drop.mannequin_unequip(src)
|
||||||
|
item_to_drop.forceMove(loc)
|
||||||
|
held_items -= item_to_drop
|
||||||
|
|
||||||
|
|
||||||
|
//If we're holding a gun, we can shoot it forever. Screw coding actual ammo management here, this is already complex enough.
|
||||||
|
/mob/living/simple_animal/hostile/mannequin/proc/equipGun(var/obj/item/weapon/gun/gun)
|
||||||
|
if (istype(gun, /obj/item/weapon/gun/energy))
|
||||||
|
var/obj/item/weapon/gun/energy/energy_gun = gun
|
||||||
|
projectiletype = energy_gun.projectile_type
|
||||||
|
else if (istype(gun, /obj/item/weapon/gun/projectile))
|
||||||
|
var/obj/item/weapon/gun/projectile/projectile_gun = gun
|
||||||
|
if (projectile_gun.ammo_type)
|
||||||
|
var/obj/item/ammo_casing/ac = new projectile_gun.ammo_type()
|
||||||
|
projectiletype = ac.projectile_type
|
||||||
|
casingtype = projectile_gun.ammo_type
|
||||||
|
qdel(ac)
|
||||||
|
if (projectiletype)
|
||||||
|
ranged = 1
|
||||||
|
ranged_cooldown_cap = 2
|
||||||
|
retreat_distance = 3
|
||||||
|
minimum_distance = 3
|
||||||
|
projectilesound = gun.fire_sound
|
||||||
|
equipped_ranged_weapon = gun
|
||||||
|
|
||||||
/mob/living/simple_animal/hostile/mannequin/proc/ChangeOwner(var/mob/owner)
|
/mob/living/simple_animal/hostile/mannequin/proc/ChangeOwner(var/mob/owner)
|
||||||
LoseTarget()
|
LoseTarget()
|
||||||
|
|||||||
@@ -2193,6 +2193,9 @@ mob/proc/on_foot()
|
|||||||
/mob/proc/canMouseDrag()//used mostly to check if the mob can drag'and'drop stuff in/out of various other stuff, such as disposals, cryo tubes, etc.
|
/mob/proc/canMouseDrag()//used mostly to check if the mob can drag'and'drop stuff in/out of various other stuff, such as disposals, cryo tubes, etc.
|
||||||
return TRUE
|
return TRUE
|
||||||
|
|
||||||
|
/mob/proc/turn_into_mannequin(var/material = "marble")
|
||||||
|
return FALSE
|
||||||
|
|
||||||
/mob/proc/get_personal_ambience()
|
/mob/proc/get_personal_ambience()
|
||||||
return list()
|
return list()
|
||||||
|
|
||||||
|
|||||||
@@ -238,7 +238,7 @@
|
|||||||
if(current_species && (current_species.anatomy_flags & RGBSKINTONE))
|
if(current_species && (current_species.anatomy_flags & RGBSKINTONE))
|
||||||
preview_icon.Blend(rgb(r_hair, g_hair, b_hair), ICON_ADD)
|
preview_icon.Blend(rgb(r_hair, g_hair, b_hair), ICON_ADD)
|
||||||
|
|
||||||
var/icon/eyes_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = current_species ? current_species.eyes : "eyes_s")
|
var/icon/eyes_s = new/icon("icon" = 'icons/mob/hair_styles.dmi', "icon_state" = current_species ? current_species.eyes : "eyes_s")
|
||||||
eyes_s.Blend(rgb(r_eyes, g_eyes, b_eyes), ICON_ADD)
|
eyes_s.Blend(rgb(r_eyes, g_eyes, b_eyes), ICON_ADD)
|
||||||
|
|
||||||
var/datum/sprite_accessory/hair_style = hair_styles_list[h_style]
|
var/datum/sprite_accessory/hair_style = hair_styles_list[h_style]
|
||||||
|
|||||||
@@ -56,7 +56,7 @@
|
|||||||
|
|
||||||
/datum/sprite_accessory/hair
|
/datum/sprite_accessory/hair
|
||||||
|
|
||||||
icon = 'icons/mob/human_face.dmi' // default icon for all hairs
|
icon = 'icons/mob/hair_styles.dmi' // default icon for all hairs
|
||||||
|
|
||||||
/datum/sprite_accessory/hair/bald
|
/datum/sprite_accessory/hair/bald
|
||||||
name = "Bald"
|
name = "Bald"
|
||||||
@@ -578,7 +578,7 @@
|
|||||||
|
|
||||||
/datum/sprite_accessory/facial_hair
|
/datum/sprite_accessory/facial_hair
|
||||||
|
|
||||||
icon = 'icons/mob/human_face.dmi'
|
icon = 'icons/mob/hair_styles.dmi'
|
||||||
gender = MALE // barf (unless you're a dorf, dorfs dig chix /w beards :P)
|
gender = MALE // barf (unless you're a dorf, dorfs dig chix /w beards :P)
|
||||||
|
|
||||||
/datum/sprite_accessory/facial_hair/shaved
|
/datum/sprite_accessory/facial_hair/shaved
|
||||||
|
|||||||
@@ -8713,7 +8713,18 @@ var/global/list/tonio_doesnt_remove=list("tonio", "blood")
|
|||||||
|
|
||||||
if(istype(O, /obj/structure/closet/statue))
|
if(istype(O, /obj/structure/closet/statue))
|
||||||
var/obj/structure/closet/statue/statue = O
|
var/obj/structure/closet/statue/statue = O
|
||||||
|
statue.dissolve()
|
||||||
|
if(istype(O, /obj/structure/mannequin))
|
||||||
|
var/obj/structure/mannequin/statue = O
|
||||||
|
statue.dissolve()
|
||||||
|
|
||||||
|
|
||||||
|
/datum/reagent/apetrine/reaction_mob(var/mob/living/M, var/method = TOUCH, var/volume)
|
||||||
|
if(..())
|
||||||
|
return 1
|
||||||
|
|
||||||
|
if(istype(M, /mob/living/simple_animal/hostile/mannequin))
|
||||||
|
var/mob/living/simple_animal/hostile/mannequin/statue = M
|
||||||
statue.dissolve()
|
statue.dissolve()
|
||||||
|
|
||||||
/datum/reagent/hemoscyanine
|
/datum/reagent/hemoscyanine
|
||||||
|
|||||||
@@ -20,5 +20,5 @@
|
|||||||
/spell/targeted/flesh_to_stone/cast(var/list/targets, mob/user)
|
/spell/targeted/flesh_to_stone/cast(var/list/targets, mob/user)
|
||||||
..()
|
..()
|
||||||
for(var/mob/living/target in targets)
|
for(var/mob/living/target in targets)
|
||||||
new /obj/structure/closet/statue(target.loc, target) //makes the statue
|
if (!target.turn_into_mannequin())//we try to turn them into marble mannequins, but if they're not compatible we'll use the old statue type
|
||||||
return
|
new /obj/structure/closet/statue(target.loc, target)
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 113 KiB After Width: | Height: | Size: 113 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 6.7 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 7.3 KiB |
@@ -1974,6 +1974,7 @@
|
|||||||
#include "code\modules\mob\living\simple_animal\friendly\arcane_golem.dm"
|
#include "code\modules\mob\living\simple_animal\friendly\arcane_golem.dm"
|
||||||
#include "code\modules\mob\living\simple_animal\friendly\cat.dm"
|
#include "code\modules\mob\living\simple_animal\friendly\cat.dm"
|
||||||
#include "code\modules\mob\living\simple_animal\friendly\corgi.dm"
|
#include "code\modules\mob\living\simple_animal\friendly\corgi.dm"
|
||||||
|
#include "code\modules\mob\living\simple_animal\friendly\corgi_clothing.dm"
|
||||||
#include "code\modules\mob\living\simple_animal\friendly\corgi_powers.dm"
|
#include "code\modules\mob\living\simple_animal\friendly\corgi_powers.dm"
|
||||||
#include "code\modules\mob\living\simple_animal\friendly\crab.dm"
|
#include "code\modules\mob\living\simple_animal\friendly\crab.dm"
|
||||||
#include "code\modules\mob\living\simple_animal\friendly\farm_animals.dm"
|
#include "code\modules\mob\living\simple_animal\friendly\farm_animals.dm"
|
||||||
|
|||||||
Reference in New Issue
Block a user