Merge branch 'master' into gatofication2
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
// GS13 - Port CE Gloves
|
||||
/obj/item/clothing/gloves/color/yellow/ce //funky looking, basically combat gloves
|
||||
desc = "Special Insulated gloves with pricy thermal shielding normally only found in combat gloves."
|
||||
name = "Chief Engineer Insulated Gloves"
|
||||
icon = 'GainStation13/icons/obj/clothing/gloves.dmi'
|
||||
icon_state = "ce_insuls"
|
||||
item_state = "blackgloves"
|
||||
siemens_coefficient = 0
|
||||
permeability_coefficient = 0.05
|
||||
strip_delay = 80
|
||||
cold_protection = HANDS
|
||||
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
|
||||
heat_protection = HANDS
|
||||
max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
|
||||
resistance_flags = NONE
|
||||
@@ -4,7 +4,6 @@
|
||||
icon = 'GainStation13/icons/obj/clothing/haydee_modular.dmi'
|
||||
mob_overlay_icon = 'GainStation13/icons/obj/clothing/haydee_modular.dmi'
|
||||
icon_state = "haydee_helmet"
|
||||
item_state = "item_haydee_helmet"
|
||||
armor = list("melee" = 10, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 0, "bio" = 0, "rad" = 25, "fire" = 25, "acid" = 25)
|
||||
slowdown = 0
|
||||
mutantrace_variation = NONE
|
||||
@@ -13,9 +12,10 @@
|
||||
/obj/item/clothing/suit/space/hardsuit/engine/haydee
|
||||
name = "Haydee Suit"
|
||||
desc = "A strangely voluptous suit. Offers little to no protection. It also appears to have minor flab-compressing properties."
|
||||
icon = 'GainStation13/icons/obj/clothing/haydee_modular.dmi'
|
||||
mob_overlay_icon = 'GainStation13/icons/obj/clothing/haydee_modular.dmi'
|
||||
anthro_mob_worn_overlay = 'GainStation13/icons/obj/clothing/haydee_modular.dmi'
|
||||
icon_state = "haydee_suit"
|
||||
icon_state = "haydee_suit1"
|
||||
item_state = "item_haydee"
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 25, "fire" = 5, "acid" = 5)
|
||||
allowed = list(/obj/item/flashlight, /obj/item/tank/internals)
|
||||
|
||||
@@ -125,3 +125,26 @@
|
||||
mob_trait = TRAIT_DISTANT
|
||||
value = 0
|
||||
medical_record_text = "Patient cares little with or dislikes being touched."
|
||||
|
||||
/datum/quirk/vegetarian
|
||||
name = "Vegetarian"
|
||||
desc = "You find the idea of eating meat morally and physically repulsive."
|
||||
value = 0
|
||||
gain_text = "<span class='notice'>You feel repulsion at the idea of eating meat.</span>"
|
||||
lose_text = "<span class='notice'>You feel like eating meat isn't that bad.</span>"
|
||||
medical_record_text = "Patient reports a vegetarian diet."
|
||||
|
||||
/datum/quirk/vegetarian/add()
|
||||
var/mob/living/carbon/human/H = quirk_holder
|
||||
var/datum/species/species = H.dna.species
|
||||
species.liked_food &= ~MEAT
|
||||
species.disliked_food |= MEAT
|
||||
|
||||
/datum/quirk/vegetarian/remove()
|
||||
var/mob/living/carbon/human/H = quirk_holder
|
||||
if(H)
|
||||
var/datum/species/species = H.dna.species
|
||||
if(initial(species.liked_food) & MEAT)
|
||||
species.liked_food |= MEAT
|
||||
else
|
||||
species.disliked_food &= ~MEAT
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
name = "GATO Badge - Correspondent"
|
||||
category = LOADOUT_CATEGORY_DONATOR
|
||||
path = /obj/item/clothing/accessory/medal/gato_badge/middleman
|
||||
ckeywhitelist = list("johnjimjim", "sonoida", "yeeny", "Not Number")
|
||||
ckeywhitelist = list("johnjimjim", "sonoida", "yeeny", "Not Number", "Not_Number", "NotNumber",)
|
||||
|
||||
/datum/gear/halsey_overcoat
|
||||
name = "Halsey's Commander Overcoat"
|
||||
@@ -29,12 +29,6 @@
|
||||
path = /obj/item/gun/ballistic/automatic/toy/pistol/haydee
|
||||
ckeywhitelist = list("lumu", "sonoida")
|
||||
|
||||
//sorry for defining this here, just thought it'd be more convenient
|
||||
/obj/item/clothing/suit/chloe/halsey //sorry to whoever chloe is, but that coat is far too badass not to be used
|
||||
name = "Halsey's Commander Overcoat"
|
||||
desc = "A Ginormous red overcoat that looks fit for a commander. Has a tag on it that reads: 'Property of Halsey Harmonten. Please return if lost!'"
|
||||
armor = list("melee" = 20, "bullet" = 20, "laser" = 0,"energy" = 20, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 0) //worn by a captain player, might as well recompensate not wearing the carapace
|
||||
|
||||
/datum/gear/rose_plush
|
||||
name = "Dezir Rose Plush"
|
||||
category = LOADOUT_SUBCATEGORY_BACKPACK_TOYS
|
||||
@@ -53,10 +47,6 @@
|
||||
path = /obj/item/clothing/suit/storage/blueshield/grimmy
|
||||
ckeywhitelist = list("bbgrimmy")
|
||||
|
||||
/obj/item/clothing/suit/storage/blueshield/grimmy
|
||||
name = "Overcoat of the Destitute"
|
||||
desc = "Welcome all to the everlasting all-time low. Please put your hands together for the ever-failing one man show: Domino!"
|
||||
|
||||
/datum/gear/tarek_gps
|
||||
name = "Tarek's GPS"
|
||||
category = LOADOUT_SUBCATEGORY_BACKPACK_TOYS
|
||||
@@ -69,10 +59,6 @@
|
||||
path = /obj/item/crowbar/bronze/glaug
|
||||
ckeywhitelist = list("happytpr")
|
||||
|
||||
/obj/item/crowbar/bronze/glaug
|
||||
name = "Milwaukee Pocket Crowbar"
|
||||
desc = "Much more expensive. Still serves the same function."
|
||||
|
||||
/datum/gear/fatfang
|
||||
name = "Fattening Fangs Injector"
|
||||
category = LOADOUT_SUBCATEGORY_BACKPACK_TOYS
|
||||
@@ -85,15 +71,6 @@
|
||||
path = /obj/item/storage/belt/utility
|
||||
ckeywhitelist = list("killmewitha22", "Killmewitha22", "KILLMEWITHA22", "sonoida")
|
||||
|
||||
/obj/item/toy/sword/chloesabre/halsey
|
||||
name = "Halsey's Sabre"
|
||||
desc = "An elegant weapon, similar in design to the Captain's Sabre, but with a platinum hilt and an adamantine blade. the hilt has an engraved hyena on it."
|
||||
force = 16
|
||||
|
||||
/obj/item/gun/ballistic/revolver/mateba/moka
|
||||
name = "\improper Custom Unica 6 revolver"
|
||||
desc = "An elegant and ornate revolver belonging to a certain hellcat commander. There are some words carved on its side: 'Dura Lex, Sed Lex'"
|
||||
|
||||
//metha rossi you fat hog
|
||||
|
||||
/datum/gear/wgspell_add
|
||||
@@ -114,18 +91,44 @@
|
||||
path = /obj/item/book/granter/spell/fattening/steal
|
||||
ckeywhitelist = list("sonoida", "themrsky", "Not Number")
|
||||
|
||||
|
||||
/datum/gear/white_eyepatch_cabal
|
||||
name = "Cabal's Eyepatch"
|
||||
category = LOADOUT_CATEGORY_GLASSES
|
||||
path = /obj/item/clothing/glasses/eyepatch/cabal
|
||||
ckeywhitelist = list("spess_lizurd", "SPESS LIZURD", "spess lizurd", "SPESS_LIZURD", "spesslizurd", "sonoida")
|
||||
|
||||
/datum/gear/white_eyepatch
|
||||
/datum/gear/white_eyepatch //accessible to anyone, at donator's request
|
||||
name = "White Eyepatch"
|
||||
category = LOADOUT_CATEGORY_GLASSES
|
||||
path = /obj/item/clothing/glasses/eyepatch/white
|
||||
|
||||
/datum/gear/metis_plush
|
||||
name = "Metis Plush"
|
||||
category = LOADOUT_SUBCATEGORY_BACKPACK_TOYS
|
||||
path = /obj/item/toy/plush/gs13/metis
|
||||
ckeywhitelist = list("paraillegal", "Paraillegal")
|
||||
|
||||
/datum/gear/wheelys
|
||||
name = "Wheely-Heels"
|
||||
category = LOADOUT_SUBCATEGORY_BACKPACK_TOYS
|
||||
path = /obj/item/clothing/shoes/wheelys
|
||||
ckeywhitelist = list("colorlessspy", "Colorlessspy")
|
||||
|
||||
/datum/gear/crowbars_plush
|
||||
name = "Crowbars Plush"
|
||||
category = LOADOUT_SUBCATEGORY_BACKPACK_TOYS
|
||||
path = /obj/item/toy/plush/gs13/crowbars
|
||||
ckeywhitelist = list("M16nPregnant", "m16npregnant" )
|
||||
|
||||
/datum/gear/sams_welder
|
||||
name = "Sam's Unlucky Welder"
|
||||
category = LOADOUT_SUBCATEGORY_BACKPACK_TOYS
|
||||
path = /obj/item/weldingtool/bronze
|
||||
ckeywhitelist = list("almaniak", "Almaniak", "AlManiak")
|
||||
|
||||
//
|
||||
//item presets for donator items
|
||||
//
|
||||
/obj/item/clothing/glasses/eyepatch/white
|
||||
name = "White eyepatch"
|
||||
desc = "Smells faintly of medicine and headaches."
|
||||
@@ -138,14 +141,24 @@
|
||||
icon_state = "eyepatch_white"
|
||||
item_state = "eyepatch_white"
|
||||
|
||||
/datum/gear/metis_plush
|
||||
name = "Metis Plush"
|
||||
category = LOADOUT_SUBCATEGORY_BACKPACK_TOYS
|
||||
path = /obj/item/toy/plush/gs13/metis
|
||||
ckeywhitelist = list("paraillegal")
|
||||
/obj/item/toy/sword/chloesabre/halsey
|
||||
name = "Halsey's Sabre"
|
||||
desc = "An elegant weapon, similar in design to the Captain's Sabre, but with a platinum hilt and an adamantine blade. the hilt has an engraved hyena on it."
|
||||
force = 16
|
||||
|
||||
/datum/gear/wheelys
|
||||
name = "Wheely-Heels"
|
||||
category = LOADOUT_SUBCATEGORY_BACKPACK_TOYS
|
||||
path = /obj/item/clothing/shoes/wheelys
|
||||
ckeywhitelist = list("colorlessspy")
|
||||
/obj/item/gun/ballistic/revolver/mateba/moka
|
||||
name = "\improper Custom Unica 6 revolver"
|
||||
desc = "An elegant and ornate revolver belonging to a certain hellcat commander. There are some words carved on its side: 'Dura Lex, Sed Lex'"
|
||||
|
||||
/obj/item/clothing/suit/chloe/halsey //sorry to whoever chloe is, but that coat is far too badass not to be used
|
||||
name = "Halsey's Commander Overcoat"
|
||||
desc = "A Ginormous red overcoat that looks fit for a commander. Has a tag on it that reads: 'Property of Halsey Harmonten. Please return if lost!'"
|
||||
armor = list("melee" = 20, "bullet" = 20, "laser" = 0,"energy" = 20, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 0) //worn by a captain player, might as well recompensate not wearing the carapace
|
||||
|
||||
/obj/item/clothing/suit/storage/blueshield/grimmy
|
||||
name = "Overcoat of the Destitute"
|
||||
desc = "Welcome all to the everlasting all-time low. Please put your hands together for the ever-failing one man show: Domino!"
|
||||
|
||||
/obj/item/crowbar/bronze/glaug
|
||||
name = "Milwaukee Pocket Crowbar"
|
||||
desc = "Much more expensive. Still serves the same function."
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
|
||||
//GS13 glitters. Making the subtle variants their own subtypes, as some use the fake gas effects to make a room look like it's full of gas, when it isnt.
|
||||
/obj/effect/decal/cleanable/glitter/pink_subtle
|
||||
name = "faint pink glitter"
|
||||
icon = 'GainStation13/icons/effects/atmospherics.dmi'
|
||||
icon_state = "glitter"
|
||||
color = "#9e0089"
|
||||
|
||||
/obj/effect/decal/cleanable/glitter/white_subtle
|
||||
name = "faint white glitter"
|
||||
icon = 'GainStation13/icons/effects/atmospherics.dmi'
|
||||
icon_state = "glitter"
|
||||
|
||||
/obj/effect/decal/cleanable/glitter/blue_subtle
|
||||
name = "faint blue glitter"
|
||||
icon = 'GainStation13/icons/effects/atmospherics.dmi'
|
||||
icon_state = "glitter"
|
||||
color = "#2dd6ff"
|
||||
@@ -0,0 +1,7 @@
|
||||
////////////// GS13 BARSIGNS ///////////////
|
||||
// Because modularity, yo
|
||||
|
||||
/datum/barsign/the_busted_belt //gs13
|
||||
name = "The Busted Belt"
|
||||
icon = "thebustedbelt" //...I dont think this survived the rebase, oops.
|
||||
desc = "GATO is not liable for any pieces of broken wardrobe."
|
||||
@@ -76,3 +76,8 @@
|
||||
desc = "A plush of black-furred nerdy goat."
|
||||
icon_state = "metis"
|
||||
attack_verb = list("squished", "goated", "baah'd")
|
||||
|
||||
/obj/item/toy/plush/gs13/crowbars
|
||||
desc = "A plush of a silly-eyed xeno seccie."
|
||||
icon_state = "crowbars"
|
||||
attack_verb = list("squished", "crowbared", "beno'd")
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
/// How many items we can push per-pump.
|
||||
var/pump_limit = 5
|
||||
|
||||
|
||||
/obj/structure/disposaloutlet/industrial_feeding_tube/Initialize(mapload)
|
||||
. = ..()
|
||||
|
||||
@@ -38,6 +39,24 @@
|
||||
anchored = TRUE
|
||||
welded = TRUE //Make it functional
|
||||
|
||||
/obj/structure/disposaloutlet/industrial_feeding_tube/examine(mob/user)
|
||||
. = ..()
|
||||
if(LAZYLEN(pump_stuff))
|
||||
switch(LAZYLEN(pump_stuff))
|
||||
if(1)
|
||||
. += "It seems to have something inside"
|
||||
if(2 to 20)
|
||||
. += "It seems to have some stuff inside"
|
||||
if(21 to 50)
|
||||
. += "It seems to be rather full of stuff!"
|
||||
if(51 to 200)
|
||||
. += "<b>It's walls are bulging out with tons of stuff packed inside!!</b>"
|
||||
else
|
||||
. += "<span class='danger'>The whole machine is shuddering as it strains to contain hundreds of objects!</span>"
|
||||
if(clogged)
|
||||
. += "<span class='warning'>It seems to be clogged with stuff!</span>"
|
||||
|
||||
|
||||
/obj/structure/disposaloutlet/industrial_feeding_tube/CheckParts(list/parts_list)
|
||||
..()
|
||||
pump_limit = 0
|
||||
@@ -48,6 +67,7 @@
|
||||
|
||||
pump_limit = ceil(pump_limit) //Only whole numbers
|
||||
|
||||
|
||||
/obj/structure/disposaloutlet/industrial_feeding_tube/deconstruct(disassembled)
|
||||
if(!(flags_1 & NODECONSTRUCT_1))
|
||||
new /obj/item/stack/sheet/metal(loc, 5)
|
||||
@@ -78,24 +98,23 @@
|
||||
|
||||
/obj/structure/disposaloutlet/industrial_feeding_tube/MouseDrop(mob/living/target)
|
||||
. = ..()
|
||||
if(!usr.canUseTopic(src, BE_CLOSE)) // iscarbon() so that xenos/wendigos(?) can do feeding stuff maybe. Maybe.
|
||||
if(!usr.canUseTopic(src, BE_CLOSE))
|
||||
return
|
||||
if(!welded)
|
||||
to_chat(usr, "<span class='warning'>You need to weld down \the [src] before you can use it.</span>")
|
||||
return
|
||||
if(attached)
|
||||
attached.visible_message("<span class='warning'>\The [src]'s tube is removed from [attached].</span>", "<span class='warning'>The tube is removed from you.")
|
||||
detach_tube(FALSE)
|
||||
return
|
||||
if(!isliving(target))
|
||||
return
|
||||
if(attached)
|
||||
attached.visible_message("<span class='warning'>[attached] is detached from [src].</span>")
|
||||
attached = null
|
||||
update_icon()
|
||||
return
|
||||
|
||||
if(iscarbon(target))
|
||||
if(iscarbon(target)) // iscarbon() so that xenos/wendigos(?) can do feeding stuff maybe. Maybe.
|
||||
var/mob/living/carbon/feedee = target
|
||||
|
||||
if(HAS_TRAIT(feedee, TRAIT_TRASHCAN))
|
||||
var/food_dump = input(usr, "Where do you shove the tube? (cancel for to just feed normally)", "Select belly") as null|anything in feedee.vore_organs
|
||||
if(HAS_TRAIT(feedee, TRAIT_TRASHCAN) || (feedee.vore_flags & FEEDING))
|
||||
var/food_dump = input(usr, "Where do you shove the tube? (cancel to just feed normally)", "Select belly") as null|anything in feedee.vore_organs
|
||||
if(food_dump && isbelly(food_dump))
|
||||
// Best to be safe with this thing. Since you can eat pretty much anythign with it...
|
||||
// Including People, Intentionally or otherwise.
|
||||
@@ -105,38 +124,56 @@
|
||||
to_chat(usr, "[feedee] doesnt want to be fed by \the [src]...")
|
||||
return
|
||||
|
||||
output_dest = food_dump //Attach to vorebelly
|
||||
attached = feedee
|
||||
|
||||
update_icon()
|
||||
START_PROCESSING(SSobj, src)
|
||||
face_atom(feedee)
|
||||
attach_tube(feedee, food_dump) // Attach in Vore Mode
|
||||
return
|
||||
|
||||
//Either we arn't attaching to vorebelly, or we arnt able to. Let's try to feed them normally!
|
||||
if(usr != feedee) //
|
||||
if(usr != feedee)
|
||||
var/feedeePrefCheck = alert(feedee, "[usr] is attempting to shove \the [src]'s tube into your mouth! Do you want this?", "THE TUBE", "Yes!!", "No!")
|
||||
if(feedeePrefCheck != "Yes!!")
|
||||
to_chat(usr, "[feedee] doesnt want to be fed by \the [src]...")
|
||||
return
|
||||
|
||||
output_dest = feedee //Attach normally
|
||||
attached = feedee
|
||||
|
||||
update_icon()
|
||||
START_PROCESSING(SSobj, src)
|
||||
face_atom(feedee)
|
||||
attach_tube(feedee) // Attach normally
|
||||
return
|
||||
|
||||
/obj/structure/disposaloutlet/industrial_feeding_tube/process()
|
||||
if(!attached)
|
||||
return PROCESS_KILL
|
||||
/// Attaches the tube to the target. dest defaults to the target, if dest isnt defined
|
||||
/obj/structure/disposaloutlet/industrial_feeding_tube/proc/attach_tube(var/mob/living/target, var/dest = null, var/loud = TRUE)
|
||||
if(!target)
|
||||
return FALSE
|
||||
if(dest)
|
||||
output_dest = dest
|
||||
else
|
||||
output_dest = target
|
||||
attached = target
|
||||
|
||||
if(loud)
|
||||
if(isbelly(output_dest))
|
||||
target.visible_message("\The [src]'s tube is shoved into [attached]!", "The tube is shoved directly into your [output_dest]!")
|
||||
else
|
||||
target.visible_message("\The [src]'s tube is shoved into [attached]!", "The tube is shoved directly into you!")
|
||||
|
||||
RegisterSignal(target, COMSIG_MOVABLE_MOVED, PROC_REF(check_target_dist))
|
||||
update_icon()
|
||||
face_atom(target)
|
||||
|
||||
/obj/structure/disposaloutlet/industrial_feeding_tube/proc/detach_tube(var/loud = TRUE)
|
||||
UnregisterSignal(attached, COMSIG_MOVABLE_MOVED)
|
||||
if(loud)
|
||||
attached.visible_message("<span class='warning'>[attached] is detached from [src].</span>")
|
||||
attached = null
|
||||
output_dest = null
|
||||
update_icon()
|
||||
|
||||
|
||||
/obj/structure/disposaloutlet/industrial_feeding_tube/proc/check_target_dist()
|
||||
if(!attached) //oh no
|
||||
UnregisterSignal()
|
||||
|
||||
if(!(get_dist(src, attached) <= 1 && isturf(attached.loc)))
|
||||
to_chat(attached, "<span class='userdanger'>The feeding hose is yanked out of you!</span>")
|
||||
attached = null
|
||||
output_dest = null
|
||||
update_icon()
|
||||
return PROCESS_KILL
|
||||
attached.visible_message("<span class='danger'The feeding tube is yanked out of [attached]!</span>","<span class='userdanger'>The feeding hose is yanked out of you!</span>")
|
||||
detach_tube(FALSE)
|
||||
return
|
||||
|
||||
face_atom(attached)
|
||||
|
||||
@@ -165,10 +202,9 @@
|
||||
// expel the contents of the holder object, then delete it
|
||||
// called when the holder exits the outlet
|
||||
/obj/structure/disposaloutlet/industrial_feeding_tube/expel(obj/structure/disposalholder/H)
|
||||
var/clunkVol = LAZYLEN(H.contents)
|
||||
if(H.hasmob) //Uh oh-
|
||||
clunkVol += 25
|
||||
playsound(src, H.hasmob ? "clang" : "clangsmall", clamp(clunkVol, 5, H.hasmob ? 50 : 25))
|
||||
playsound(src, "clang", 100)
|
||||
visible_message("<span class='danger'>\The [src] loudly clunks as something large enters it's intake!</span>")
|
||||
H.active = FALSE
|
||||
H.vent_gas(get_turf(src))
|
||||
if(clogged)
|
||||
@@ -193,12 +229,14 @@
|
||||
break
|
||||
if(!pumping)
|
||||
pumping = TRUE
|
||||
playsound(src, 'GainStation13/sound/rakshasa/Corrosion3.ogg', 50, 1)
|
||||
update_icon()
|
||||
spawn(8)
|
||||
pumping = FALSE
|
||||
update_icon()
|
||||
spawn(9) //Wait for the animation to finish
|
||||
|
||||
|
||||
if(!output_dest || !attached) //We either arnt, or got disconnected by time stuff was about to splort out!
|
||||
spew(this_pump, TRUE)
|
||||
if(LAZYLEN(pump_stuff) && repeat)
|
||||
@@ -251,13 +289,13 @@
|
||||
if(is_type_in_list(I, item_vore_blacklist))
|
||||
inedible += I
|
||||
continue
|
||||
/*
|
||||
|
||||
if(isliving(AM))
|
||||
var/mob/living/cutie = AM
|
||||
if(cutie.devourable != TRUE) //Do not eat this QT...
|
||||
if(!(cutie.vore_flags & DEVOURABLE)) //Do not eat this QT...
|
||||
inedible += cutie
|
||||
continue
|
||||
*/
|
||||
|
||||
|
||||
fed_something = TRUE
|
||||
AM.forceMove(output_dest)
|
||||
@@ -267,7 +305,7 @@
|
||||
// After everything, if we've pushed something, play the "rubber tube noise"
|
||||
// It's technically an evil digestion sound from a snowflake shadekin, but it makes for a good tube sound. Thanks Verkie!
|
||||
if(fed_something)
|
||||
playsound(attached.loc, 'v_CHOMPstation2/sound/rakshasa/Corrosion3.ogg', rand(10,50), 1)
|
||||
playsound(attached.loc, 'GainStation13/sound/rakshasa/Corrosion3.ogg', rand(50,70), 1)
|
||||
|
||||
if(LAZYLEN(pump_stuff) && repeat)
|
||||
pump()
|
||||
@@ -277,7 +315,7 @@
|
||||
|
||||
/obj/structure/disposaloutlet/industrial_feeding_tube/expel_holder(obj/structure/disposalholder/H, playsound=FALSE)
|
||||
if(playsound)
|
||||
playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0)
|
||||
playsound(src, 'sound/machines/hiss.ogg', 25, 0, 0)
|
||||
|
||||
if(!H)
|
||||
return
|
||||
@@ -290,10 +328,7 @@
|
||||
/obj/structure/disposaloutlet/industrial_feeding_tube/attack_hand(mob/user)
|
||||
. = ..()
|
||||
if(attached)
|
||||
attached.visible_message("<span class='warning'>[attached] is detached from [src].</span>")
|
||||
attached = null
|
||||
output_dest = null
|
||||
update_icon()
|
||||
detach_tube()
|
||||
return
|
||||
|
||||
/obj/structure/disposaloutlet/industrial_feeding_tube/attackby(obj/item/I, mob/living/user, params)
|
||||
@@ -340,18 +375,32 @@
|
||||
update_icon()
|
||||
return
|
||||
|
||||
if(TOOL_CROWBAR)
|
||||
if(!clogged)
|
||||
to_chat(user, "<span class='notice'>\The [src] doesnt seem to be clogged at the moment...")
|
||||
return TRUE
|
||||
|
||||
user.visible_message("<span class='italics'>[user] starts to pry open the maintenance hatch of \the [src], attempting to unclog it...</span>")
|
||||
if(do_after(user, 30, TRUE, src))
|
||||
user.visible_message("<span class='notice'>[user] unclogs \the [src]!</span>")
|
||||
unclog()
|
||||
return
|
||||
. = ..()
|
||||
|
||||
/obj/structure/disposaloutlet/industrial_feeding_tube/crowbar_act(mob/living/user, obj/item/I)
|
||||
if(!clogged)
|
||||
to_chat(user, "<span class='notice'>\The [src] doesnt seem to be clogged at the moment...")
|
||||
return TRUE
|
||||
user.visible_message("<span class='italics'>[user] starts to pry open the maintenance hatch of \the [src], attempting to unclog it...</span>")
|
||||
I.play_tool_sound(src, 100)
|
||||
if(I.use_tool(src, user, 30))
|
||||
user.visible_message("<span class='notice'>[user] pries open the maintenance hatch on \the [src], unclogging it!</span>")
|
||||
unclog()
|
||||
return TRUE
|
||||
|
||||
|
||||
// Plungers are a thing now, why not give them the ability to unclog?
|
||||
/obj/structure/disposaloutlet/industrial_feeding_tube/plunger_act(obj/item/plunger/P, mob/living/user, reinforced)
|
||||
if(!clogged)
|
||||
to_chat(user, "<span class='notice'>\The [src] doesnt seem to be clogged at the moment...")
|
||||
return TRUE
|
||||
user.visible_message("<span class='italics'>[user] starts to furiously plunge the tube of \the [src], attempting to unclog it...</span>")
|
||||
//I.play_tool_sound(src, 100) I dont think plungers have a use sound...
|
||||
if(P.use_tool(src, user, 20)) //Plungers are slightly shorter because funny niche use
|
||||
user.visible_message("<span class='notice'>[user] pries open the maintenance hatch on \the [src], unclogging it!</span>")
|
||||
unclog()
|
||||
return
|
||||
|
||||
/obj/structure/disposaloutlet/industrial_feeding_tube/welder_act(mob/living/user, obj/item/I)
|
||||
if(!I.tool_start_check(user, amount=0))
|
||||
return
|
||||
|
||||
@@ -1,6 +1,28 @@
|
||||
/datum/material/calorite
|
||||
name = "calorite"
|
||||
sheet_type = /obj/item/stack/sheet/mineral/calorite
|
||||
color = list(340/255, 150/255, 50/255,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0)
|
||||
strength_modifier = 1.5
|
||||
categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE)
|
||||
beauty_modifier = 0.05
|
||||
armor_modifiers = list(MELEE = 1.1, BULLET = 1.1, LASER = 1.15, ENERGY = 1.15, BOMB = 1, BIO = 1, RAD = 1, FIRE = 0.7, ACID = 1.1) // Same armor as gold.
|
||||
|
||||
/datum/material/calorite/on_applied_obj(obj/source, amount, material_flags)
|
||||
. = ..()
|
||||
if(!(material_flags & MATERIAL_AFFECT_STATISTICS))
|
||||
return
|
||||
|
||||
var/obj/source_obj = source
|
||||
source_obj.damtype = FAT
|
||||
|
||||
/datum/material/calorite/on_removed_obj(obj/source, material_flags)
|
||||
if(!(material_flags & MATERIAL_AFFECT_STATISTICS))
|
||||
return ..()
|
||||
|
||||
var/obj/source_obj = source
|
||||
source_obj.damtype = initial(source_obj.damtype)
|
||||
return ..()
|
||||
|
||||
|
||||
/turf/closed/mineral/calorite //GS13
|
||||
mineralType = /obj/item/stack/ore/calorite
|
||||
@@ -33,13 +55,14 @@
|
||||
|
||||
GLOBAL_LIST_INIT(calorite_recipes, list ( \
|
||||
new/datum/stack_recipe("Calorite tile", /obj/item/stack/tile/mineral/calorite, 1, 4, 20), \
|
||||
new/datum/stack_recipe("Fatty statue", /obj/structure/statue/calorite/fatty, 5, one_per_turf = 1, on_floor = 1),
|
||||
new/datum/stack_recipe("Calorite doors", /obj/structure/mineral_door/calorite, 5, one_per_turf = 1, on_floor = 1),
|
||||
new/datum/stack_recipe("Calorite Ingots", /obj/item/ingot/calorite, time = 30), \
|
||||
new/datum/stack_recipe("Fatty statue", /obj/structure/statue/calorite/fatty, 5, one_per_turf = 1, on_floor = 1),\
|
||||
new/datum/stack_recipe("Calorite doors", /obj/structure/mineral_door/calorite, 5, one_per_turf = 1, on_floor = 1),\
|
||||
))
|
||||
|
||||
/obj/item/stack/sheet/mineral/calorite/Initialize(mapload, new_amount, merge = TRUE)
|
||||
recipes = GLOB.calorite_recipes
|
||||
/obj/item/stack/sheet/mineral/calorite/get_main_recipes()
|
||||
. = ..()
|
||||
. += GLOB.calorite_recipes
|
||||
|
||||
|
||||
/obj/item/stack/tile/mineral/calorite //GS13
|
||||
@@ -246,3 +269,5 @@ GLOBAL_LIST_INIT(calorite_recipes, list ( \
|
||||
fatten()
|
||||
. = ..()
|
||||
|
||||
/obj/item/ingot/calorite
|
||||
custom_materials = list(/datum/material/calorite=1500)
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
/obj/item/reagent_containers/food/snacks/proc/handle_tf(mob/living/eater)
|
||||
var/datum/component/transformation_item/transformation_component = GetComponent(/datum/component/transformation_item)
|
||||
if(!istype(transformation_component) || transformation_component.transfer_to_vore || (transformation_component.transformed_mob != src))
|
||||
return FALSE
|
||||
|
||||
var/mob/living/food_mob = transformation_component.transformed_mob
|
||||
if(!istype(food_mob) || !(food_mob?.vore_flags & DEVOURABLE) || (eater?.vore_flags & NO_VORE) || !istype(eater.vore_selected))
|
||||
return FALSE
|
||||
|
||||
qdel(transformation_component)
|
||||
var/obj/belly/vore_belly = eater.vore_selected
|
||||
if(!vore_belly.nom_mob(food_mob,eater))
|
||||
return FALSE
|
||||
|
||||
return TRUE
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
/mob/living/proc/get_tf_component()
|
||||
var/obj/item/item_loc = loc
|
||||
if(!istype(item_loc))
|
||||
return FALSE
|
||||
|
||||
var/datum/component/transformation_item/transformation_component = item_loc.GetComponent(/datum/component/transformation_item)
|
||||
if(!istype(transformation_component) || (transformation_component.transformed_mob != src))
|
||||
return FALSE
|
||||
|
||||
return transformation_component
|
||||
|
||||
/mob/living/proc/handle_transformation_ooc_escape()
|
||||
var/datum/component/transformation_item/transformation_component = get_tf_component()
|
||||
if(!transformation_component)
|
||||
return FALSE
|
||||
|
||||
qdel(transformation_component)
|
||||
return TRUE
|
||||
|
||||
/mob/living/proc/attempt_to_escape_tf()
|
||||
var/datum/component/transformation_item/transformation_component = get_tf_component()
|
||||
if(!transformation_component)
|
||||
return FALSE
|
||||
|
||||
if(!transformation_component.able_to_struggle_out)
|
||||
to_chat(src, span_warning("You are unable to struggle out."))
|
||||
return FALSE
|
||||
|
||||
to_chat(src, span_notice("You attempt to escape your transformation."))
|
||||
if(!do_after(src, 60 SECONDS))
|
||||
to_chat(src, span_warning("You fail to escape."))
|
||||
return FALSE
|
||||
|
||||
qdel(transformation_component)
|
||||
return TRUE
|
||||
|
||||
@@ -0,0 +1,105 @@
|
||||
/datum/component/transformation_item
|
||||
/// What mob do we currently have stuck in us?
|
||||
var/mob/living/transformed_mob
|
||||
/// Do we release the mob when the parent item is destroyed?
|
||||
var/release_mob = TRUE
|
||||
/// Is the mob able to speak as the item?
|
||||
var/able_to_speak = FALSE
|
||||
/// Is the mob able to emote as the item?
|
||||
var/able_to_emote = FALSE
|
||||
/// Does the object scale with the sprite size of the mob inside of it?
|
||||
var/scale_object = TRUE
|
||||
/// Show custom description.
|
||||
var/show_that_object_is_tf = TRUE
|
||||
/// Stored real name
|
||||
var/stored_real_name = ""
|
||||
/// Stored name
|
||||
var/stored_name = ""
|
||||
/// Is the component able to be removed?
|
||||
var/stuck_on_item = FALSE
|
||||
/// Is the person able to struggle out?
|
||||
var/able_to_struggle_out = TRUE
|
||||
/// Transfer to vore belly when eaten
|
||||
var/transfer_to_vore = TRUE
|
||||
|
||||
/datum/component/transformation_item/Initialize()
|
||||
RegisterSignal(parent, COMSIG_PARENT_EXAMINE, PROC_REF(examine))
|
||||
RegisterSignal(parent, COMSIG_PARENT_QDELETING, PROC_REF(remove_mob))
|
||||
|
||||
/datum/component/transformation_item/Destroy(force, silent)
|
||||
remove_mob()
|
||||
return ..()
|
||||
|
||||
/datum/component/transformation_item/proc/examine(datum/source, mob/user, list/examine_list)
|
||||
if(show_that_object_is_tf)
|
||||
examine_list += span_notice("Something about [source] seems lifelike.")
|
||||
|
||||
/datum/component/transformation_item/proc/register_mob(mob/living/mob_to_register)
|
||||
var/atom/parent_atom = parent
|
||||
if(!istype(mob_to_register))
|
||||
return FALSE
|
||||
|
||||
transformed_mob = mob_to_register
|
||||
stored_real_name = mob_to_register.real_name
|
||||
stored_name = mob_to_register.name
|
||||
|
||||
// This is really dumb, but if it works, then maybe it is not dumb.
|
||||
mob_to_register.real_name = parent_atom.name
|
||||
mob_to_register.name = parent_atom.name
|
||||
|
||||
ADD_TRAIT(mob_to_register, TRAIT_TRANSFORMED, src)
|
||||
ADD_TRAIT(mob_to_register, TRAIT_RESISTCOLD, src)
|
||||
ADD_TRAIT(mob_to_register, TRAIT_RESISTLOWPRESSURE, src)
|
||||
ADD_TRAIT(mob_to_register, TRAIT_LOWPRESSURECOOLING, src)
|
||||
|
||||
if(!able_to_speak)
|
||||
ADD_TRAIT(mob_to_register, TRAIT_MUTE, src)
|
||||
|
||||
if(!able_to_emote)
|
||||
ADD_TRAIT(mob_to_register, TRAIT_EMOTEMUTE, src)
|
||||
|
||||
// need to stop them from using radio headsets.
|
||||
var/mob/living/carbon/human/human_mob = mob_to_register
|
||||
if(istype(human_mob))
|
||||
ADD_TRAIT(mob_to_register, TRAIT_PARALYSIS_L_ARM, src)
|
||||
ADD_TRAIT(mob_to_register, TRAIT_PARALYSIS_R_ARM, src)
|
||||
human_mob.update_disabled_bodyparts()
|
||||
|
||||
mob_to_register.forceMove(parent_atom)
|
||||
if(scale_object)
|
||||
var/target_size = mob_to_register.size_multiplier
|
||||
var/matrix/new_matrix = new
|
||||
|
||||
new_matrix.Scale(target_size)
|
||||
new_matrix.Translate(0,16 * (target_size-1))
|
||||
parent_atom.transform = new_matrix
|
||||
|
||||
/datum/component/transformation_item/proc/remove_mob()
|
||||
if(!release_mob || !transformed_mob)
|
||||
return FALSE
|
||||
|
||||
transformed_mob.real_name = stored_real_name
|
||||
transformed_mob.name = stored_name
|
||||
|
||||
if(!able_to_speak)
|
||||
REMOVE_TRAIT(transformed_mob, TRAIT_MUTE, src)
|
||||
|
||||
if(!able_to_emote)
|
||||
REMOVE_TRAIT(transformed_mob, TRAIT_EMOTEMUTE, src)
|
||||
|
||||
REMOVE_TRAIT(transformed_mob, TRAIT_TRANSFORMED, src)
|
||||
REMOVE_TRAIT(transformed_mob, TRAIT_RESISTCOLD, src)
|
||||
REMOVE_TRAIT(transformed_mob, TRAIT_RESISTLOWPRESSURE, src)
|
||||
REMOVE_TRAIT(transformed_mob, TRAIT_LOWPRESSURECOOLING, src)
|
||||
|
||||
var/mob/living/carbon/human/human_mob = transformed_mob
|
||||
if(istype(human_mob))
|
||||
REMOVE_TRAIT(human_mob, TRAIT_PARALYSIS_L_ARM, src)
|
||||
REMOVE_TRAIT(human_mob, TRAIT_PARALYSIS_R_ARM, src)
|
||||
human_mob.update_disabled_bodyparts()
|
||||
|
||||
var/atom/parent_atom = parent
|
||||
transformed_mob.forceMove(parent_atom.loc)
|
||||
if(scale_object)
|
||||
parent_atom.transform = null
|
||||
|
||||
@@ -0,0 +1,116 @@
|
||||
/obj/item/transformation_item
|
||||
name = "Handheld Transmogrifier"
|
||||
desc = "a handheld device that is mysteriously able to turn people into objects. It can also be used to remove said transformations."
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
icon_state = "gizmo_scan"
|
||||
item_state = "silencer"
|
||||
lefthand_file = 'icons/mob/inhands/antag/abductor_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/antag/abductor_righthand.dmi'
|
||||
|
||||
/// What item are we wanting to TF people into?
|
||||
var/obj/item/target_item
|
||||
/// Do we want our transformed person to be able to speak as the object?
|
||||
var/able_to_speak = TRUE
|
||||
/// Do we want our transformed person to be able to emote as the object?
|
||||
var/able_to_emote = TRUE
|
||||
/// Do we want the item to scale?
|
||||
var/scale_object = FALSE
|
||||
/// Do we want to show that the object was once a person?
|
||||
var/show_that_object_is_tf = TRUE
|
||||
/// Is our captured person able to struggle out?
|
||||
var/able_to_struggle_out = TRUE
|
||||
/// Do we have any items we can't turn people into?
|
||||
var/list/object_blacklist = list()
|
||||
|
||||
/obj/item/transformation_item/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
|
||||
. = ..()
|
||||
var/obj/item/attacked_item = target
|
||||
if(!proximity_flag || !istype(attacked_item))
|
||||
return FALSE
|
||||
|
||||
var/datum/component/transformation_item/transformation_component = attacked_item.GetComponent(/datum/component/transformation_item)
|
||||
if(istype(transformation_component) && !transformation_component.stuck_on_item)
|
||||
qdel(transformation_component)
|
||||
to_chat(user, span_notice("You dispel the current transformation for [attacked_item]."))
|
||||
return
|
||||
|
||||
target_item = attacked_item
|
||||
to_chat(user, span_notice("The next time someone is transformed, they will be transformed into [attacked_item]."))
|
||||
return
|
||||
|
||||
/obj/item/transformation_item/attack(mob/living/M, mob/living/user)
|
||||
if(!target_item)
|
||||
to_chat(user, span_warning("You need to have an item linked to transform someone."))
|
||||
return
|
||||
|
||||
perform_transfomration(M, user)
|
||||
return
|
||||
|
||||
/obj/item/transformation_item/proc/perform_transfomration(mob/living/target_mob, mob/living/user)
|
||||
if(!istype(target_mob))
|
||||
return FALSE
|
||||
|
||||
if(!target_item.Adjacent(target_mob))
|
||||
to_chat(user, span_warning("The [target_item] isn't close enough to [target_mob]"))
|
||||
return FALSE
|
||||
|
||||
if(target_item in target_mob.get_contents())
|
||||
return FALSE // Don't TF someone into something they are holding.
|
||||
|
||||
if(!target_mob?.client?.prefs?.object_tf)
|
||||
to_chat(user, span_warning("It seems like [target_mob] does not want to be transformed."))
|
||||
return FALSE
|
||||
|
||||
var/datum/component/transformation_item/transformation_component = target_item.AddComponent(/datum/component/transformation_item)
|
||||
// Make sure that we apply our variables before we actually put the mob in the item.
|
||||
transformation_component.able_to_speak = able_to_speak
|
||||
transformation_component.able_to_emote = able_to_emote
|
||||
transformation_component.scale_object = scale_object
|
||||
transformation_component.show_that_object_is_tf = show_that_object_is_tf
|
||||
transformation_component.able_to_struggle_out = able_to_struggle_out
|
||||
|
||||
transformation_component.register_mob(target_mob)
|
||||
target_item = null
|
||||
return TRUE
|
||||
|
||||
/obj/item/transformation_item/ui_data(mob/user)
|
||||
var/list/data = list()
|
||||
data["able_to_speak"] = able_to_speak
|
||||
data["able_to_emote"] = able_to_emote
|
||||
data["scale_object"] = scale_object
|
||||
data["show_that_object_is_tf"] = show_that_object_is_tf
|
||||
data["linked_item_name"] = target_item
|
||||
data["able_to_struggle_out"] = able_to_struggle_out
|
||||
|
||||
return data
|
||||
|
||||
/obj/item/transformation_item/ui_act(action, params)
|
||||
if(..())
|
||||
return
|
||||
|
||||
switch(action)
|
||||
if("set_speaking")
|
||||
able_to_speak = !able_to_speak
|
||||
. = TRUE
|
||||
|
||||
if("set_emote")
|
||||
able_to_emote = !able_to_emote
|
||||
. = TRUE
|
||||
|
||||
if("set_scale")
|
||||
scale_object = !scale_object
|
||||
. = TRUE
|
||||
|
||||
if("toggle_struggle")
|
||||
able_to_struggle_out = !able_to_struggle_out
|
||||
. = TRUE
|
||||
|
||||
if("set_show_desc")
|
||||
show_that_object_is_tf = !show_that_object_is_tf
|
||||
. = TRUE
|
||||
|
||||
/obj/item/transformation_item/ui_interact(mob/user, datum/tgui/ui)
|
||||
ui = SStgui.try_update_ui(user, src, ui)
|
||||
if(!ui)
|
||||
ui = new(user, src, "TransformTool", name)
|
||||
ui.open()
|
||||
@@ -0,0 +1,17 @@
|
||||
//Roses dont exist here... Sad
|
||||
|
||||
// /datum/gear/head/rose
|
||||
// name = "Rose"
|
||||
// path = /obj/item/grown/rose
|
||||
|
||||
/datum/gear/head/sunflower
|
||||
name = "Sunflower"
|
||||
path = /obj/item/grown/sunflower
|
||||
|
||||
/datum/gear/head/poppy
|
||||
name = "Poppy"
|
||||
path = /obj/item/reagent_containers/food/snacks/grown/poppy
|
||||
|
||||
/datum/gear/head/harebell
|
||||
name = "Harebell"
|
||||
path = /obj/item/reagent_containers/food/snacks/grown/harebell
|
||||
@@ -0,0 +1,3 @@
|
||||
/datum/gear/uniform/modularjumpsuit
|
||||
name = "Modular Jumpsuit (gray)"
|
||||
path = /obj/item/clothing/under/color/grey/modular
|
||||
@@ -31,6 +31,8 @@
|
||||
var/fatness_vulnerable = FALSE
|
||||
/// Similar to fatness_vulnerable, but with more extreme effects such as transformation/hypno.
|
||||
var/extreme_fatness_vulnerable = FALSE
|
||||
/// Can the person be transformed into an object?
|
||||
var/object_tf
|
||||
|
||||
// Helplessness, a set of prefs that make things extra tough at higher weights. If set to FALSE, they won't do anything.
|
||||
///What fatness level disables movement?
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
/datum/reagent/consumable
|
||||
var/use_gs_icon = FALSE
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/drinkingglass/on_reagent_change(changetype)
|
||||
icon = 'icons/obj/drinks.dmi'
|
||||
if(reagents.reagent_list.len)
|
||||
var/datum/reagent/R = reagents.get_master_reagent()
|
||||
if(istype(R, /datum/reagent/consumable))
|
||||
var/datum/reagent/consumable/C = R
|
||||
if(C.use_gs_icon == TRUE)
|
||||
icon = 'GainStation13/icons/obj/drinks.dmi'
|
||||
|
||||
..()
|
||||
@@ -22,7 +22,7 @@
|
||||
if(!using)
|
||||
using = TRUE
|
||||
to_chat(user, "<span>You do a rep with the [src]. YEEEEEAH!!!</span>")
|
||||
if(do_after(usr, CLICK_CD_RESIST-reps, 0, usr, 1))
|
||||
if(do_after(usr, CLICK_CD_RESIST-reps, usr))
|
||||
if(iscarbon(user))
|
||||
var/mob/living/carbon/U = user
|
||||
U.adjust_fatness(-10, FATTENING_TYPE_WEIGHT_LOSS)
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
/obj/item/seeds/berry/blueberry
|
||||
name = "pack of blueberry seeds"
|
||||
desc = "These seeds grow into blueberry bushes."
|
||||
icon_state = "seed-blueberry"
|
||||
species = "blueberry"
|
||||
plantname = "Blueberry Bush"
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/berries/blueberry
|
||||
@@ -11,11 +10,18 @@
|
||||
yield = 1
|
||||
production = 10
|
||||
rarity = 30
|
||||
icon = 'GainStation13/icons/obj/hydroponics/seeds.dmi'
|
||||
icon_state = "seed-blueberry"
|
||||
growing_icon = 'GainStation13/icons/obj/hydroponics/growing.dmi'
|
||||
icon_grow = "berry-grow" // Uses one growth icons set for all the subtypes
|
||||
icon_dead = "berry-dead" // Same for the dead icon
|
||||
icon_harvest = "blueberry-harvest"
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/berries/blueberry
|
||||
seed = /obj/item/seeds/berry/blueberry
|
||||
name = "bunch of blueberries"
|
||||
desc = "Taste so good, you might turn blue!"
|
||||
icon = 'GainStation13/icons/obj/hydroponics/harvest.dmi'
|
||||
icon_state = "blueberrypile"
|
||||
filling_color = "#5d00c7"
|
||||
foodtype = FRUIT
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
/obj/item/seeds/lipoplant
|
||||
name = "pack of adipolipus"
|
||||
desc = "These seeds grow into a foreign plant."
|
||||
icon = 'GainStation13/icons/obj/hydroponics/lipo_seeds.dmi'
|
||||
icon_state = "lipo_seed"
|
||||
species = "adipolipus"
|
||||
plantname = "Adipolipus"
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/lipofruit
|
||||
@@ -11,17 +9,19 @@
|
||||
maturation = 8
|
||||
production = 5
|
||||
yield = 1
|
||||
growing_icon = 'GainStation13/icons/obj/hydroponics/lipo_growing.dmi'
|
||||
reagents_add = list(/datum/reagent/consumable/lipoifier = 0.05)
|
||||
icon = 'GainStation13/icons/obj/hydroponics/seeds.dmi'
|
||||
icon_state = "seed-lipo"
|
||||
growing_icon = 'GainStation13/icons/obj/hydroponics/growing.dmi'
|
||||
icon_grow = "lipo-grow" // Uses one growth icons set for all the subtypes
|
||||
icon_dead = "lipo-dead" // Same for the dead icon
|
||||
icon_harvest = "lipo-harvest"
|
||||
reagents_add = list(/datum/reagent/consumable/lipoifier = 0.05)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/lipofruit
|
||||
seed = /obj/item/seeds/lipoplant
|
||||
name = "lipofruit"
|
||||
desc = "A foreign fruit with an hard shell. Perhaps something sharp could open it?"
|
||||
icon = 'GainStation13/icons/obj/hydroponics/lipo_harvest.dmi'
|
||||
icon = 'GainStation13/icons/obj/hydroponics/harvest.dmi'
|
||||
icon_state = "lipo_nut"
|
||||
item_state = "lipo_nut"
|
||||
possible_transfer_amounts = list(5, 10, 15, 20, 25, 30, 50)
|
||||
|
||||
@@ -8,22 +8,26 @@
|
||||
/obj/item/seeds/cannabis/munchies
|
||||
name = "pack of munchies weed seeds"
|
||||
desc = "These seeds grow into munchies weed."
|
||||
icon_state = "seed-munchies"
|
||||
species = "munchycannabis"
|
||||
plantname = "Munchies Weed"
|
||||
icon_grow = "munchycannabis-grow" // Uses one growth icons set for all the subtypes
|
||||
icon_dead = "munchycannabis-dead" // Same for the dead icon
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/cannabis/munchies
|
||||
genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/glow/orange)
|
||||
mutatelist = list()
|
||||
reagents_add = list(/datum/reagent/drug/space_drugs = 0.05,
|
||||
/datum/reagent/drug/munchies = 0.10)
|
||||
rarity = 69
|
||||
icon = 'GainStation13/icons/obj/hydroponics/seeds.dmi'
|
||||
icon_state = "seed-munchies"
|
||||
growing_icon = 'GainStation13/icons/obj/hydroponics/growing.dmi'
|
||||
icon_grow = "munchycannabis-grow" // Uses one growth icons set for all the subtypes
|
||||
icon_dead = "munchycannabis-dead" // Same for the dead icon
|
||||
icon_harvest = "munchycannabis-harvest"
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/cannabis/munchies
|
||||
seed = /obj/item/seeds/cannabis/munchies
|
||||
name = "munchies cannabis leaf"
|
||||
desc = "You feel hungry just looking at it."
|
||||
icon = 'GainStation13/icons/obj/hydroponics/harvest.dmi'
|
||||
icon_state = "munchycannabis"
|
||||
wine_power = 90
|
||||
|
||||
|
||||
@@ -1 +1,11 @@
|
||||
//GS13 - markings, ported or our own (preferably mark where you took them from)
|
||||
|
||||
/datum/sprite_accessory/hair/elize
|
||||
name = "Elize"
|
||||
icon = 'GainStation13/icons/mob/human_face.dmi'
|
||||
icon_state = "hair_elize"
|
||||
|
||||
/datum/sprite_accessory/hair/lem
|
||||
name = "Lem"
|
||||
icon = 'GainStation13/icons/mob/human_face.dmi'
|
||||
icon_state = "hair_lem"
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
icon_state = "gator"
|
||||
color_src = MATRIXED
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
hide_legs = FALSE
|
||||
|
||||
/datum/sprite_accessory/taur/fatdrake //ported from Vorestation
|
||||
name = "Fat Drake"
|
||||
@@ -46,3 +47,17 @@
|
||||
icon = 'GainStation13/icons/mob/markings/mam_taur.dmi'
|
||||
icon_state = "bigleggy"
|
||||
color_src = MUTCOLORS
|
||||
|
||||
/datum/sprite_accessory/taur/fatnaga //ported from Vorestation
|
||||
name = "Fat Naga"
|
||||
icon = 'GainStation13/icons/mob/markings/mam_taur.dmi'
|
||||
icon_state = "fatnaga"
|
||||
color_src = MATRIXED
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
|
||||
/datum/sprite_accessory/taur/altnaga //ported from Vorestation
|
||||
name = "Alt Naga"
|
||||
icon = 'GainStation13/icons/mob/markings/mam_taur.dmi'
|
||||
icon_state = "altnaga"
|
||||
color_src = MATRIXED
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
|
||||
@@ -6,3 +6,50 @@
|
||||
icon_state = "hjackal"
|
||||
color_src = MATRIXED
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/synthlizproto1
|
||||
name = "Synthetic Lizard - Prototype Visor 1"
|
||||
icon = 'GainStation13/icons/mob/markings/mam_snouts.dmi'
|
||||
icon_state = "synthlizproto1"
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/synthlizproto2
|
||||
name = "Synthetic Lizard - Prototype Visor 2"
|
||||
icon = 'GainStation13/icons/mob/markings/mam_snouts.dmi'
|
||||
icon_state = "synthlizproto2"
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/gator
|
||||
name = "Gator"
|
||||
icon = 'GainStation13/icons/mob/markings/mam_snouts.dmi'
|
||||
icon_state = "gator"
|
||||
color_src = MATRIXED
|
||||
|
||||
//eastern dragon
|
||||
/datum/sprite_accessory/snouts/mam_snouts/easterndragon
|
||||
name = "Eastern Dragon"
|
||||
icon = 'GainStation13/icons/mob/markings/char_snouts.dmi'
|
||||
icon_state = "easterndw"
|
||||
color_src = MATRIXED
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/easterndragon/no_whiskers
|
||||
name = "Eastern Dragon - No Whiskers"
|
||||
icon = 'GainStation13/icons/mob/markings/char_snouts.dmi'
|
||||
icon_state = "easterndnw"
|
||||
color_src = MATRIXED
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/feasterndragon
|
||||
name = "Eastern Dragon (Top)"
|
||||
icon = 'GainStation13/icons/mob/markings/char_snouts.dmi'
|
||||
icon_state = "feasterndw"
|
||||
color_src = MATRIXED
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/feasterndragon/no_whiskers
|
||||
name = "Eastern Dragon - No Whiskers (Top)"
|
||||
icon = 'GainStation13/icons/mob/markings/char_snouts.dmi'
|
||||
icon_state = "feasterndnw"
|
||||
color_src = MATRIXED
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
|
||||
@@ -1 +1,92 @@
|
||||
//GS13 - markings, ported or our own (preferably mark where you took them from)
|
||||
|
||||
//snaketail
|
||||
/datum/sprite_accessory/tails/lizard/snaketail //GS13 - ...6 seperate paths for one tail. Wew.
|
||||
name = "Snaketail"
|
||||
icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
|
||||
icon_state = "snaketail"
|
||||
color_src = MATRIXED
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
|
||||
/datum/sprite_accessory/tails_animated/lizard/snaketail
|
||||
name = "Snaketail"
|
||||
icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
|
||||
icon_state = "snaketail"
|
||||
color_src = MATRIXED
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
|
||||
/datum/sprite_accessory/tails/human/snaketail
|
||||
name = "Snaketail"
|
||||
icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
|
||||
icon_state = "snaketail"
|
||||
color_src = MATRIXED
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/snaketail
|
||||
name = "Snaketail"
|
||||
icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
|
||||
icon_state = "snaketail"
|
||||
color_src = MATRIXED
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
|
||||
/datum/sprite_accessory/tails/mam_tails/snaketail
|
||||
name = "Snaketail"
|
||||
icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
|
||||
icon_state = "snaketail"
|
||||
color_src = MATRIXED
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
|
||||
/datum/sprite_accessory/tails_animated/mam_tails_animated/snaketail
|
||||
name = "Snaketail"
|
||||
icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
|
||||
icon_state = "snaketail"
|
||||
color_src = MATRIXED
|
||||
matrixed_sections = MATRIX_RED_GREEN
|
||||
|
||||
//spaded tail
|
||||
/datum/sprite_accessory/tails/mam_tails/spade
|
||||
name = "Demon Spade"
|
||||
icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
|
||||
icon_state = "spade"
|
||||
|
||||
/datum/sprite_accessory/tails_animated/mam_tails_animated/spade
|
||||
name = "Demon Spade"
|
||||
icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
|
||||
icon_state = "spade"
|
||||
|
||||
/datum/sprite_accessory/tails/human/spade
|
||||
name = "Demon Spade"
|
||||
icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
|
||||
icon_state = "spade"
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/spade
|
||||
name = "Demon Spade"
|
||||
icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
|
||||
icon_state = "spade"
|
||||
|
||||
//deer tail
|
||||
|
||||
|
||||
/datum/sprite_accessory/tails/human/deer
|
||||
name = "Deer"
|
||||
icon_state = "deer"
|
||||
color_src = MATRIXED
|
||||
icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/deer
|
||||
name = "Deer"
|
||||
icon_state = "deer"
|
||||
color_src = MATRIXED
|
||||
icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/mam_tails/deer
|
||||
name = "Deer"
|
||||
icon_state = "deer"
|
||||
color_src = MATRIXED
|
||||
icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated/mam_tails_animated/deer
|
||||
name = "Deer"
|
||||
icon_state = "deer"
|
||||
color_src = MATRIXED
|
||||
icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
layer_index = BELLY_LAYER_INDEX
|
||||
|
||||
/obj/item/organ/genital/belly/modify_size(modifier, min = BELLY_SIZE_DEF, max = BELLY_SIZE_MAX)
|
||||
var/new_value = clamp(size_cached + modifier, min, max)
|
||||
var/new_value = clamp(size_cached + modifier, starting_size, max)
|
||||
if(new_value == size_cached)
|
||||
return
|
||||
prev_size = size_cached
|
||||
@@ -40,12 +40,13 @@
|
||||
switch(owner.fullness)
|
||||
if(FULLNESS_LEVEL_BLOATED to FULLNESS_LEVEL_BEEG)
|
||||
icon = 'hyperstation/icons/obj/genitals/belly_round.dmi' //We use round belly to represent stuffedness
|
||||
icon_state = "belly_round_[size]"
|
||||
if(FULLNESS_LEVEL_BEEG to FULLNESS_LEVEL_NOMOREPLZ)
|
||||
icon = 'hyperstation/icons/obj/genitals/belly_round.dmi'
|
||||
icon_state = "belly_[icon_shape_state]_[size+1]"
|
||||
icon_state = "belly_round_[size+1]"
|
||||
if(FULLNESS_LEVEL_NOMOREPLZ to INFINITY)
|
||||
icon = 'hyperstation/icons/obj/genitals/belly_round.dmi'
|
||||
icon_state = "belly_[icon_shape_state]_[size+2]"
|
||||
icon_state = "belly_round_[size+2]"
|
||||
|
||||
if(owner)
|
||||
if(owner.dna.species.use_skintones && owner.dna.features["genitals_use_skintone"])
|
||||
@@ -64,6 +65,7 @@
|
||||
else
|
||||
color = "#[D.features["belly_color"]]"
|
||||
size = D.features["belly_size"]
|
||||
starting_size = D.features["belly_size"]
|
||||
shape = D.features["belly_shape"]
|
||||
inflatable = D.features["inflatable_belly"]
|
||||
toggle_visibility(D.features["belly_visibility"], FALSE)
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
shot_glass_icon_state = "shotglassbrown"
|
||||
pH = 4.5
|
||||
value = 0.1
|
||||
use_gs_icon = TRUE
|
||||
|
||||
/datum/reagent/consumable/ethanol/glyphid_slammer
|
||||
name = "Glyphid slammer"
|
||||
@@ -26,3 +27,4 @@
|
||||
shot_glass_icon_state = "shotglassbrown"
|
||||
pH = 4.5
|
||||
value = 0.1
|
||||
use_gs_icon = TRUE
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
glass_name = "belly bloats"
|
||||
glass_desc = "The perfect mix to be big and merry with."
|
||||
shot_glass_icon_state = "shotglassbrown"
|
||||
use_gs_icon = TRUE
|
||||
|
||||
/datum/reagent/consumable/ethanol/belly_bloats/on_mob_life(mob/living/carbon/M)
|
||||
if(M && M?.client?.prefs.weight_gain_food) // GS13
|
||||
@@ -30,6 +31,7 @@
|
||||
glass_name = "blobby mary"
|
||||
glass_desc = "For the morbidly obese ladies and gentlemen."
|
||||
shot_glass_icon_state = "shotglassred"
|
||||
use_gs_icon = TRUE
|
||||
|
||||
/datum/reagent/consumable/ethanol/blobby_mary/on_mob_life(mob/living/carbon/M)
|
||||
if(M && M?.client?.prefs.weight_gain_food) // GS13
|
||||
@@ -49,6 +51,7 @@
|
||||
glass_name = "beltbuster mead"
|
||||
glass_desc = "The ambrosia of the blubbery gods."
|
||||
shot_glass_icon_state = "shotglassgold"
|
||||
use_gs_icon = TRUE
|
||||
|
||||
/datum/reagent/consumable/ethanol/beltbuster_mead/on_mob_life(mob/living/carbon/M)
|
||||
if(M && M?.client?.prefs.weight_gain_food) // GS13
|
||||
@@ -67,6 +70,7 @@
|
||||
glass_name = "heavy cafe"
|
||||
glass_desc = "To enjoy slow mornings with."
|
||||
shot_glass_icon_state = "shotglassbrown"
|
||||
use_gs_icon = TRUE
|
||||
|
||||
/datum/reagent/consumable/heavy_cafe/on_mob_life(mob/living/carbon/M)
|
||||
M.dizziness = max(0,M.dizziness-5)
|
||||
@@ -92,6 +96,7 @@
|
||||
glass_name = "fruits tea"
|
||||
glass_desc = "Goes down really easy and stays there for a long time."
|
||||
shot_glass_icon_state = "shotglassgold"
|
||||
use_gs_icon = TRUE
|
||||
|
||||
/datum/reagent/consumable/fruits_tea/on_mob_life(mob/living/carbon/M)
|
||||
M.dizziness = max(0,M.dizziness-2)
|
||||
@@ -118,6 +123,7 @@
|
||||
glass_name = "snakebite"
|
||||
glass_desc = "Won't hurt like a real bite, but you'll still regert drinking this."
|
||||
shot_glass_icon_state = "shotglassgreen"
|
||||
use_gs_icon = TRUE
|
||||
|
||||
/datum/reagent/consumable/snakebite/on_mob_life(mob/living/carbon/M)
|
||||
if(M && M?.client?.prefs.weight_gain_food) // GS13
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
// GS13 subtle glitters
|
||||
/datum/reagent/glitter/pink_subtle
|
||||
name = "lesser pink glitter"
|
||||
description = "pink sparkles that get everywhere. these ones seem lower density than normal."
|
||||
color = "#ff8080" //A light pink color
|
||||
glitter_type = /obj/effect/decal/cleanable/glitter/pink_subtle
|
||||
|
||||
/datum/reagent/glitter/white_subtle
|
||||
name = "lesser white glitter"
|
||||
description = "white sparkles that get everywhere. these ones seem lower density than normal."
|
||||
glitter_type = /obj/effect/decal/cleanable/glitter/white_subtle
|
||||
|
||||
/datum/reagent/glitter/blue_subtle
|
||||
name = "lesser blue glitter"
|
||||
description = "blue sparkles that get everywhere. these ones seem lower density than normal."
|
||||
color = "#4040FF" //A blueish color
|
||||
glitter_type = /obj/effect/decal/cleanable/glitter/blue_subtle
|
||||
@@ -0,0 +1,20 @@
|
||||
///////////////////////////////// SUBTLE GLITTERS ////////////////////////////
|
||||
|
||||
/datum/chemical_reaction/lesser_pink
|
||||
name = "pink glitter dilution"
|
||||
id = "lesser_pink_glitter"
|
||||
results = list(/datum/reagent/glitter/pink_subtle = 2)
|
||||
required_reagents = list(/datum/reagent/glitter/pink = 1, /datum/reagent/space_cleaner = 1) //You clean some of it away, I guess?
|
||||
|
||||
/datum/chemical_reaction/lesser_white
|
||||
name = "white glitter dilution"
|
||||
id = "lesser_white_glitter"
|
||||
results = list(/datum/reagent/glitter/white_subtle = 2)
|
||||
required_reagents = list(/datum/reagent/glitter/white = 1, /datum/reagent/space_cleaner = 1)
|
||||
|
||||
/datum/chemical_reaction/lesser_blue
|
||||
name = "pink glitter dilution"
|
||||
id = "lesser_blue_glitter"
|
||||
results = list(/datum/reagent/glitter/blue_subtle = 2)
|
||||
required_reagents = list(/datum/reagent/glitter/blue = 1, /datum/reagent/space_cleaner = 1)
|
||||
//Im not going to do the recolor recipes for the subtle glitters. Unless that's really wanted (except you cant even make glitter to start with so the recipes are already super niche to begin with.)
|
||||
@@ -0,0 +1,26 @@
|
||||
/obj/item/borg/upgrade/feeding_arm
|
||||
name = "food gripper module"
|
||||
desc = "An extra module that allows cyborgs to grab food and drinks, and feed them to people."
|
||||
icon_state = "cyborg_upgrade3"
|
||||
|
||||
/obj/item/borg/upgrade/feeding_arm/action(mob/living/silicon/robot/R, user = usr)
|
||||
. = ..()
|
||||
if(.)
|
||||
var/obj/item/gripper/food/S = new(R.module)
|
||||
R.module.basic_modules += S
|
||||
R.module.add_module(S, FALSE, TRUE)
|
||||
|
||||
/obj/item/borg/upgrade/feeding_arm/deactivate(mob/living/silicon/robot/R, user = usr)
|
||||
. = ..()
|
||||
if (.)
|
||||
var/obj/item/gripper/food/S = locate() in R.module
|
||||
R.module.remove_module(S, TRUE)
|
||||
|
||||
/obj/item/gripper/food
|
||||
name = "food gripper"
|
||||
desc = "A simple grasping tool for interacting with various food and drink related items."
|
||||
item_flags = NOBLUDGEON
|
||||
|
||||
can_hold = list(
|
||||
/obj/item/reagent_containers,
|
||||
)
|
||||
@@ -129,6 +129,15 @@
|
||||
construction_time = 100
|
||||
category = list("Cyborg Upgrade Modules")
|
||||
|
||||
/datum/design/borg_foodgrip
|
||||
name = "Cyborg Upgrade (Food Gripper)"
|
||||
id = "borg_upgrade_foodgrip"
|
||||
build_type = MECHFAB
|
||||
build_path = /obj/item/borg/upgrade/feeding_arm
|
||||
materials = list(/datum/material/iron = 8000, /datum/material/glass = 6000)
|
||||
construction_time = 100
|
||||
category = list("Cyborg Upgrade Modules")
|
||||
|
||||
//todo: make a seperate file for extra borg modules
|
||||
|
||||
/obj/item/borg/upgrade/cookiesynth
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
/turf/open/floor/mineral/titanium/old
|
||||
name = "tiled floor"
|
||||
icon = 'GainStation13/icons/turf/floors.dmi'
|
||||
icon_state = "titanium_old"
|
||||
floor_tile = /obj/item/stack/tile/mineral/titanium
|
||||
broken_states = list("titanium_dam1_old","titanium_dam2_old","titanium_dam3_old","titanium_dam4_old","titanium_dam5_old")
|
||||
/turf/open/floor/mineral/titanium/old/airless
|
||||
initial_gas_mix = "TEMP=2.7"
|
||||
|
||||
/turf/open/floor/mineral/titanium/old/yellow
|
||||
icon_state = "titanium_yellow_old"
|
||||
/turf/open/floor/mineral/titanium/old/yellow/airless
|
||||
initial_gas_mix = "TEMP=2.7"
|
||||
|
||||
/turf/open/floor/mineral/titanium/old/blue
|
||||
icon_state = "titanium_blue_old"
|
||||
/turf/open/floor/mineral/titanium/old/blue/airless
|
||||
initial_gas_mix = "TEMP=2.7"
|
||||
|
||||
/turf/open/floor/mineral/titanium/old/white
|
||||
icon_state = "titanium_white_old"
|
||||
/turf/open/floor/mineral/titanium/old/white/airless
|
||||
initial_gas_mix = "TEMP=2.7"
|
||||
|
||||
/turf/open/floor/mineral/titanium/old/purple
|
||||
icon_state = "titanium_purple_old"
|
||||
/turf/open/floor/mineral/titanium/purple/airless
|
||||
initial_gas_mix = "TEMP=2.7"
|
||||
@@ -0,0 +1,165 @@
|
||||
/////////////////////
|
||||
// Tile reskinning //
|
||||
/////////////////////
|
||||
// Q: What is this?
|
||||
// A: A simple function to allow you to change what tiles you place with a stack of tiles.
|
||||
// Q: Why do it this way?
|
||||
// A: This allows players more freedom to do beautiful-looking builds. Having five types of titanium tile would be clunky as heck.
|
||||
// Q: Great! Can I use this for all floors?
|
||||
// A: Unfortunately, this does not work on subtypes of plasteel and instead we must change the icon_state of these turfs instead, as the icon_regular_floor var that "saves" what type of floor a plasteel subtype turf was so once repaired...
|
||||
// ... it'll go back to the floor it was instead of grey (medical floors turn white even after crowbaring the tile and putting it back). This stops changing turf_type from working.
|
||||
|
||||
/obj/item/stack/tile/mineral/titanium/attack_self(mob/user)
|
||||
var/static/list/choices = list(
|
||||
"Titanium" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_shuttle"),
|
||||
"Yellow Titanium" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_shuttle_yellow"),
|
||||
"Blue Titanium" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_shuttle_blue"),
|
||||
"White Titanium" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_shuttle_white"),
|
||||
"Purple Titanium" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_shuttle_purple"),
|
||||
"Titanium Tile" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_shuttle_old"),
|
||||
"Yellow Titanium Tile" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_shuttle_old_yellow"),
|
||||
"Blue Titanium Tile" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_shuttle_old_blue"),
|
||||
"White Titanium Tile" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_shuttle_old_white"),
|
||||
"Purple Titanium Tile" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_shuttle_old_purple"),
|
||||
)
|
||||
var/choice = show_radial_menu(user, src, choices, radius = 48, require_near = TRUE)
|
||||
switch(choice)
|
||||
if("Titanium")
|
||||
turf_type = /turf/open/floor/mineral/titanium
|
||||
icon_state = "tile_shuttle"
|
||||
desc = "Sleek titanium tiles."
|
||||
if("Yellow Titanium")
|
||||
turf_type = /turf/open/floor/mineral/titanium/yellow
|
||||
icon_state = "tile_shuttle_yellow"
|
||||
desc = "Sleek yellow titanium tiles."
|
||||
if("Blue Titanium")
|
||||
turf_type = /turf/open/floor/mineral/titanium/blue
|
||||
icon_state = "tile_shuttle_blue"
|
||||
desc = "Sleek blue titanium tiles."
|
||||
if("White Titanium")
|
||||
turf_type = /turf/open/floor/mineral/titanium/white
|
||||
icon_state = "tile_shuttle_white"
|
||||
desc = "Sleek white titanium tiles."
|
||||
if("Purple Titanium")
|
||||
turf_type = /turf/open/floor/mineral/titanium/purple
|
||||
icon_state = "tile_shuttle_purple"
|
||||
desc = "Sleek purple titanium tiles."
|
||||
if("Titanium Tile")
|
||||
turf_type = /turf/open/floor/mineral/titanium/old
|
||||
icon_state = "tile_shuttle_old"
|
||||
desc = "Titanium floor tiles."
|
||||
if("Yellow Titanium Tile")
|
||||
turf_type = /turf/open/floor/mineral/titanium/old/yellow
|
||||
icon_state = "tile_shuttle_old_yellow"
|
||||
desc = "Yellow titanium floor tiles."
|
||||
if("Blue Titanium Tile")
|
||||
turf_type = /turf/open/floor/mineral/titanium/old/blue
|
||||
icon_state = "tile_shuttle_old_blue"
|
||||
desc = "Blue titanium floor tiles."
|
||||
if("White Titanium Tile")
|
||||
turf_type = /turf/open/floor/mineral/titanium/old/white
|
||||
icon_state = "tile_shuttle_old_white"
|
||||
desc = "White titanium floor tiles."
|
||||
if("Purple Titanium Tile")
|
||||
turf_type = /turf/open/floor/mineral/titanium/old/purple
|
||||
icon_state = "tile_shuttle_old_purple"
|
||||
desc = "Purple titanium floor tiles."
|
||||
|
||||
/obj/item/stack/tile/plasteel
|
||||
desc = "Metal tiles that can be placed on top of plating. Press Z or use these to change tiles."
|
||||
icon = 'GainStation13/icons/obj/tiles.dmi'
|
||||
var/tile_reskin_mode
|
||||
tile_reskin_mode = "plasteel"
|
||||
|
||||
/obj/item/stack/tile/plasteel/attack_self(mob/user)
|
||||
var/static/list/choices = list(
|
||||
"Plasteel" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_plasteel"),
|
||||
"White Plasteel" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_white"),
|
||||
"Dark Plasteel" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_dark"),
|
||||
"Chapel Flooring" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_chapel"),
|
||||
"Shower" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_shower"),
|
||||
"Freezer" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_freezer"),
|
||||
"Kitchen" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_kitchen"),
|
||||
"Grimy" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_grimy"),
|
||||
"Solar Panel" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_solar"),
|
||||
)
|
||||
var/choice = show_radial_menu(user, src, choices, radius = 48, require_near = TRUE)
|
||||
switch(choice)
|
||||
if("Plasteel")
|
||||
turf_type = /turf/open/floor/plasteel
|
||||
icon_state = "tile_plasteel"
|
||||
desc = "Metal floor tiles."
|
||||
tile_reskin_mode = "plasteel"
|
||||
if("White Plasteel")
|
||||
turf_type = /turf/open/floor/plasteel/white
|
||||
icon_state = "tile_white"
|
||||
desc = "White metal floor tiles."
|
||||
tile_reskin_mode = "white plasteel"
|
||||
if("Dark Plasteel")
|
||||
turf_type = /turf/open/floor/plasteel/dark
|
||||
icon_state = "tile_dark"
|
||||
desc = "Dark metal floor tiles."
|
||||
tile_reskin_mode = "dark plasteel"
|
||||
if("Chapel Flooring")
|
||||
turf_type = /turf/open/floor/plasteel/chapel
|
||||
icon_state = "tile_chapel"
|
||||
desc = "Those very dark floor tiles you find in the chapel a lot."
|
||||
tile_reskin_mode = "chapel"
|
||||
if("Shower")
|
||||
turf_type = /turf/open/floor/plasteel/showroomfloor
|
||||
icon_state = "tile_shower"
|
||||
desc = "Tiles for showers, bathrooms and wetrooms."
|
||||
tile_reskin_mode = "shower"
|
||||
if("Freezer")
|
||||
turf_type = /turf/open/floor/plasteel/freezer
|
||||
icon_state = "tile_freezer"
|
||||
desc = "High-grip flooring for walk-in freezers and chillers."
|
||||
tile_reskin_mode = "freezer"
|
||||
if("Kitchen")
|
||||
turf_type = /turf/open/floor/plasteel/cafeteria
|
||||
icon_state = "tile_kitchen"
|
||||
desc = "Chequered pattern plasteel tiles."
|
||||
tile_reskin_mode = "kitchen"
|
||||
if("Grimy")
|
||||
turf_type = /turf/open/floor/plasteel/grimy
|
||||
icon_state = "tile_grimy"
|
||||
desc = "I'm sure it'll look nice somewhere?"
|
||||
tile_reskin_mode = "grimy"
|
||||
if("Solar Panel")
|
||||
turf_type = /turf/open/floor/plasteel/airless/solarpanel
|
||||
icon_state = "tile_solar"
|
||||
desc = "Flooring usually placed below solar panels. Using this indoors is an intergalactic fashion crime."
|
||||
tile_reskin_mode = "solar"
|
||||
|
||||
/turf/open/floor/plasteel/attackby(obj/item/reskinstack, mob/user, params)
|
||||
if(istype(reskinstack, /obj/item/stack/tile/plasteel))
|
||||
var/obj/item/stack/tile/plasteel/hitfloor = reskinstack
|
||||
switch(hitfloor.tile_reskin_mode)
|
||||
if("plasteel")
|
||||
icon_state = "floor"
|
||||
icon_regular_floor = "floor"
|
||||
if("white plasteel")
|
||||
icon_state = "white"
|
||||
icon_regular_floor = "white"
|
||||
if("dark plasteel")
|
||||
icon_state = "darkfull"
|
||||
icon_regular_floor = "darkfull"
|
||||
if("chapel")
|
||||
icon_state = "chapel_alt"
|
||||
icon_regular_floor = "chapel_alt"
|
||||
if("shower")
|
||||
icon_state = "showroomfloor"
|
||||
icon_regular_floor = "showroomfloor"
|
||||
if("freezer")
|
||||
icon_state = "freezerfloor"
|
||||
icon_regular_floor = "freezerfloor"
|
||||
if("kitchen")
|
||||
icon_state = "cafeteria"
|
||||
icon_regular_floor = "cafeteria"
|
||||
if("grimy")
|
||||
icon_state = "grimy"
|
||||
icon_regular_floor = "grimy"
|
||||
if("solar")
|
||||
icon_state = "solarpanel"
|
||||
icon_regular_floor = "solarpanel"
|
||||
else return
|
||||
Reference in New Issue
Block a user