@@ -28,3 +28,7 @@ GLOBAL_LIST_INIT(clothing_belt, generate_chameleon_choices(/obj/item/storage/bel
|
||||
// accessories
|
||||
GLOBAL_LIST_INIT(clothing_accessory, generate_chameleon_choices(/obj/item/clothing/accessory,
|
||||
list(/obj/item/clothing/accessory/chameleon)))
|
||||
|
||||
GLOBAL_LIST_INIT(clothing_ears, generate_chameleon_choices(/obj/item/clothing/ears))
|
||||
|
||||
GLOBAL_LIST_INIT(clothing_headsets, generate_chameleon_choices(/obj/item/radio/headset))
|
||||
|
||||
@@ -144,11 +144,6 @@
|
||||
slot_flags = SLOT_HOLSTER
|
||||
origin_tech = list(TECH_BIO = 3)
|
||||
|
||||
/obj/item/holder/protoblob
|
||||
slot_flags = SLOT_HEAD | SLOT_OCLOTHING | SLOT_HOLSTER | SLOT_ICLOTHING | SLOT_ID | SLOT_MASK
|
||||
w_class = ITEMSIZE_TINY
|
||||
allowed = list(/obj/item/gun,/obj/item/flashlight,/obj/item/tank,/obj/item/suit_cooling_unit,/obj/item/melee/baton)
|
||||
|
||||
|
||||
/obj/item/holder/fish/afterattack(atom/target, mob/user, clickchain_flags, list/params)
|
||||
if(!target)
|
||||
@@ -160,6 +155,12 @@
|
||||
if(prob(10))
|
||||
L.afflict_stun(20 * 2)
|
||||
|
||||
/obj/item/holder/protoblob
|
||||
clothing_flags = ALLOWINTERNALS
|
||||
slot_flags = SLOT_HEAD | SLOT_OCLOTHING | SLOT_HOLSTER | SLOT_ICLOTHING | SLOT_ID | SLOT_MASK | SLOT_GLOVES | SLOT_BACK | SLOT_BELT | SLOT_FEET | SLOT_EARS | SLOT_EYES
|
||||
w_class = ITEMSIZE_TINY
|
||||
allowed = list(/obj/item/gun,/obj/item/flashlight,/obj/item/tank,/obj/item/suit_cooling_unit,/obj/item/melee/baton)
|
||||
|
||||
//Roach Types
|
||||
/obj/item/holder/roach
|
||||
w_class = ITEMSIZE_TINY
|
||||
|
||||
@@ -73,6 +73,9 @@
|
||||
add_verb(src, /mob/living/simple_mob/protean_blob/proc/appearanceswitch)
|
||||
add_verb(src, /mob/living/simple_mob/protean_blob/proc/rig_transform)
|
||||
add_verb(src, /mob/living/simple_mob/protean_blob/proc/leap_attack)
|
||||
add_verb(src, /mob/living/simple_mob/protean_blob/proc/chameleon_apperance)
|
||||
add_verb(src, /mob/living/simple_mob/protean_blob/proc/chameleon_color)
|
||||
add_verb(src, /mob/living/simple_mob/protean_blob/proc/chameleon_apperance_rig)
|
||||
add_verb(src, /mob/living/proc/usehardsuit)
|
||||
INVOKE_ASYNC(src, TYPE_PROC_REF(/mob, update_health))
|
||||
else
|
||||
@@ -524,6 +527,11 @@
|
||||
icon_living = "puddle0"
|
||||
update_icon()
|
||||
|
||||
if(istype(loc, /obj/item/holder))
|
||||
var/obj/item/holder/H = loc
|
||||
H.sync()
|
||||
|
||||
|
||||
/mob/living/simple_mob/protean_blob/proc/leap_attack()
|
||||
set name = "Pounce"
|
||||
set desc = "Allows a protean blob to launch itself at people."
|
||||
@@ -554,7 +562,7 @@
|
||||
return
|
||||
|
||||
visible_message("<span class='warning'>[src] coils itself up like a spring, preparing to leap at [target]!</span>")
|
||||
if(do_after(src, 7.5 SECONDS, target)) //7.5 seconds.
|
||||
if(do_after(src, 1 SECOND, target)) //1 second
|
||||
if(buckled || pinned.len)
|
||||
return
|
||||
|
||||
@@ -563,7 +571,10 @@
|
||||
src.forceMove(H)
|
||||
|
||||
switch(src.zone_sel.selecting)
|
||||
if(BP_GROIN)
|
||||
if(BP_L_LEG)
|
||||
targeted_area = SLOT_ID_UNIFORM //fetish_code.rtf
|
||||
target_displayname = "body"
|
||||
if(BP_R_LEG)
|
||||
targeted_area = SLOT_ID_UNIFORM //fetish_code.rtf
|
||||
target_displayname = "body"
|
||||
if(BP_TORSO)
|
||||
@@ -575,6 +586,24 @@
|
||||
if(O_MOUTH)
|
||||
targeted_area = SLOT_ID_MASK
|
||||
target_displayname = "face"
|
||||
if(BP_R_HAND)
|
||||
targeted_area = SLOT_ID_GLOVES
|
||||
target_displayname = "body"
|
||||
if(BP_L_HAND)
|
||||
targeted_area = SLOT_ID_GLOVES
|
||||
target_displayname = "body"
|
||||
if(BP_GROIN)
|
||||
targeted_area = SLOT_ID_BACK
|
||||
target_displayname = "back"
|
||||
if(BP_L_FOOT)
|
||||
targeted_area = SLOT_ID_SHOES
|
||||
target_displayname = "feet"
|
||||
if(BP_R_FOOT)
|
||||
targeted_area = SLOT_ID_SHOES
|
||||
target_displayname = "feet"
|
||||
if(O_EYES)
|
||||
targeted_area = SLOT_ID_GLASSES
|
||||
target_displayname = "eyes"
|
||||
|
||||
if(target.equip_to_slot_if_possible(H, targeted_area, INV_OP_IGNORE_DELAY | INV_OP_SILENT))
|
||||
visible_message("<span class='danger'>[src] leaps at [target]'s [target_displayname]!</span>")
|
||||
@@ -583,6 +612,140 @@
|
||||
H.sync(src)
|
||||
return
|
||||
|
||||
/mob/living/simple_mob/protean_blob/proc/chameleon_apperance()
|
||||
set name = "Chameleon Change"
|
||||
set desc = "Allows a protean blob to change or reset its apperance when worn."
|
||||
set category = "Abilities"
|
||||
|
||||
if(!istype(loc, /obj/item/holder))
|
||||
to_chat(src, "<span class='notice'>You can't do that while not being held or worn.</span>")
|
||||
return
|
||||
|
||||
var/obj/item/holder/H = loc
|
||||
var/chosen_list
|
||||
var/icon_file
|
||||
switch(input(src,"What type of clothing would you like to mimic or reset appearance?","Mimic Clothes") as null|anything in list("under", "suit", "hat", "gloves", "shoes", "back", "mask", "glasses", "belt", "ears", "headsets", "reset"))
|
||||
if("reset")
|
||||
H.color = initial(H.color)
|
||||
H.icon_override = null
|
||||
H.sync(src)
|
||||
return
|
||||
if("under")
|
||||
chosen_list = GLOB.clothing_under
|
||||
icon_file = 'icons/mob/clothing/uniform.dmi'
|
||||
if("suit")
|
||||
chosen_list = GLOB.clothing_suit
|
||||
icon_file = 'icons/mob/clothing/suits.dmi'
|
||||
if("hat")
|
||||
chosen_list = GLOB.clothing_head
|
||||
icon_file = 'icons/mob/clothing/head.dmi'
|
||||
if("gloves")
|
||||
chosen_list = GLOB.clothing_gloves
|
||||
icon_file = 'icons/mob/clothing/hands.dmi'
|
||||
if("shoes")
|
||||
chosen_list = GLOB.clothing_shoes
|
||||
icon_file = 'icons/mob/clothing/feet.dmi'
|
||||
if("back")
|
||||
chosen_list = GLOB.clothing_backpack
|
||||
icon_file = 'icons/mob/clothing/back.dmi'
|
||||
if("mask")
|
||||
chosen_list = GLOB.clothing_mask
|
||||
icon_file = 'icons/mob/clothing/mask.dmi'
|
||||
if("glasses")
|
||||
chosen_list = GLOB.clothing_glasses
|
||||
icon_file = 'icons/mob/clothing/eyes.dmi'
|
||||
if("belt")
|
||||
chosen_list = GLOB.clothing_belt
|
||||
icon_file = 'icons/mob/clothing/belt.dmi'
|
||||
if("ears")
|
||||
chosen_list = GLOB.clothing_ears
|
||||
icon_file = 'icons/mob/clothing/ears.dmi'
|
||||
if("headsets")
|
||||
chosen_list = GLOB.clothing_headsets
|
||||
icon_file = 'icons/mob/clothing/ears.dmi'
|
||||
|
||||
var/picked = input(src,"What clothing would you like to mimic?","Mimic Clothes") as null|anything in chosen_list
|
||||
|
||||
if(!ispath(chosen_list[picked]))
|
||||
return
|
||||
|
||||
H.disguise(chosen_list[picked])
|
||||
if(isnull(H.icon_override))
|
||||
H.icon_override = icon_file
|
||||
H.update_worn_icon() //so our overlays update.
|
||||
|
||||
if (ismob(H.loc))
|
||||
var/mob/M = H.loc
|
||||
M.update_inv_belt() //so our overlays
|
||||
M.update_inv_back()
|
||||
|
||||
|
||||
/mob/living/simple_mob/protean_blob/proc/chameleon_apperance_rig()
|
||||
set name = "Chameleon Hardsuit Change"
|
||||
set desc = "Allows a protean blob to change or reset its apperance when worn."
|
||||
set category = "Abilities"
|
||||
|
||||
if(!istype(loc, /obj/item/hardsuit/protean))
|
||||
to_chat(src, "<span class='notice'>You can't do that while not being held or worn as a hardsuit.</span>")
|
||||
return
|
||||
|
||||
var/obj/item/hardsuit/protean/H = loc
|
||||
var/chosen_list
|
||||
var/obj/item/clothing/chosenpart
|
||||
|
||||
switch(input(src,"What type of clothing would you like to mimic or reset appearance?","Mimic Clothes") as null|anything in list("suit", "helmet", "gloves", "boots", "reset"))
|
||||
if("reset")
|
||||
H.boots.disguise(H.boots.type) //disguising it as itself just sets its vars back to initial which is what we want
|
||||
H.chest.disguise(H.chest.type)
|
||||
H.helmet.disguise(H.helmet.type)
|
||||
H.gloves.disguise(H.gloves.type)
|
||||
H.boots.update_worn_icon()
|
||||
H.chest.update_worn_icon()
|
||||
H.helmet.update_worn_icon()
|
||||
H.gloves.update_worn_icon()
|
||||
return
|
||||
if("suit")
|
||||
chosenpart = H.chest
|
||||
chosen_list = GLOB.clothing_suit
|
||||
if("helmet")
|
||||
chosenpart = H.helmet
|
||||
chosen_list = GLOB.clothing_head
|
||||
if("gloves")
|
||||
chosenpart = H.gloves
|
||||
chosen_list = GLOB.clothing_gloves
|
||||
if("boots")
|
||||
chosenpart = H.boots
|
||||
chosen_list = GLOB.clothing_shoes
|
||||
|
||||
|
||||
var/picked = input(src,"What clothing would you like to mimic?","Mimic Clothes") as null|anything in chosen_list
|
||||
|
||||
if(!ispath(chosen_list[picked]))
|
||||
return
|
||||
|
||||
chosenpart.disguise(chosen_list[picked])
|
||||
chosenpart.update_worn_icon()
|
||||
|
||||
|
||||
/mob/living/simple_mob/protean_blob/proc/chameleon_color()
|
||||
set name = "Chameleon Color"
|
||||
set desc = "Allows a protean blob to change or reset its color when worn."
|
||||
set category = "Abilities"
|
||||
|
||||
if(!istype(loc, /obj/item/holder))
|
||||
to_chat(src, "<span class='notice'>You can't do that while not being held or worn.</span>")
|
||||
return
|
||||
|
||||
var/obj/item/holder/H = loc
|
||||
var/color_in = input("Pick a color. Cancelling sets it to default.","Color", H.color) as null|color
|
||||
|
||||
if(color_in)
|
||||
H.color = color_in
|
||||
else
|
||||
H.color = initial(H.color)
|
||||
H.update_worn_icon() //so our overlays update.
|
||||
|
||||
|
||||
/mob/living/simple_mob/protean_blob/make_perspective()
|
||||
. = ..()
|
||||
self_perspective.set_plane_visible(/atom/movable/screen/plane_master/augmented, INNATE_TRAIT)
|
||||
|
||||
|
Before Width: | Height: | Size: 209 KiB After Width: | Height: | Size: 210 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 76 KiB After Width: | Height: | Size: 77 KiB |
|
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 44 KiB |