protean blob chameleon clothing (#6261)

fetish code
This commit is contained in:
lolman360
2024-01-18 11:27:09 +00:00
committed by GitHub
parent 9eaf2a07ef
commit bdefdf6b1b
8 changed files with 175 additions and 7 deletions
+4
View File
@@ -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))
+6 -5
View File
@@ -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
+165 -2
View File
@@ -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)
Binary file not shown.

Before

Width:  |  Height:  |  Size: 209 KiB

After

Width:  |  Height:  |  Size: 210 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 76 KiB

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 44 KiB