[MIRROR] Fantasy redgate map (#7035)

Co-authored-by: Casey <a.roaming.shadow@gmail.com>
Co-authored-by: Raeschen <rycoop29@gmail.com>
This commit is contained in:
CHOMPStation2
2023-09-26 07:29:35 -07:00
committed by GitHub
parent 56b0d60711
commit 507879aef8
60 changed files with 52723 additions and 10 deletions

View File

@@ -263,6 +263,12 @@
affecting.salve() affecting.salve()
playsound(src, pick(apply_sounds), 25) playsound(src, pick(apply_sounds), 25)
/obj/item/stack/medical/ointment/simple
name = "ointment paste"
desc = "A simple thick paste used to salve burns."
singular_name = "old-ointment"
icon_state = "old-ointment"
/obj/item/stack/medical/advanced/bruise_pack /obj/item/stack/medical/advanced/bruise_pack
name = "advanced trauma kit" name = "advanced trauma kit"
singular_name = "advanced trauma kit" singular_name = "advanced trauma kit"

View File

@@ -23,4 +23,64 @@
name = "katana" name = "katana"
desc = "Woefully underpowered in D20. This one looks pretty sharp." desc = "Woefully underpowered in D20. This one looks pretty sharp."
icon_state = "katana" icon_state = "katana"
slot_flags = SLOT_BELT | SLOT_BACK slot_flags = SLOT_BELT | SLOT_BACK
/obj/item/weapon/material/sword/katana/caneblade
name = "cane blade"
desc = "Used for making people fall over instead of helping them stand up."
icon_state = "caneblade"
item_state = "caneblade"
/obj/item/weapon/material/sword/rapier
name = "rapier"
desc = "A slender, fancy and sharply pointed sword."
icon_state = "rapier"
item_state = "rapier"
slot_flags = SLOT_BELT
applies_material_colour = 0
attack_verb = list("attacked", "stabbed", "prodded", "poked", "lunged")
edge = 0 //rapiers are pointy, but not cutty like other swords
/obj/item/weapon/material/sword/longsword
name = "longsword"
desc = "A double-edged large blade."
icon_state = "longsword"
item_state = "longsword"
applies_material_colour = 0
slot_flags = SLOT_BELT | SLOT_BACK
can_cleave = TRUE
/obj/item/weapon/material/sword/sabre
name = "sabre"
desc = "A sharp curved sword, a favored weapon of pirates far in the past."
icon_state = "sabre"
item_state = "sabre"
applies_material_colour = 0 //messes up the hilt color otherwise
slot_flags = SLOT_BELT
/obj/item/weapon/material/sword/battleaxe
name = "battleaxe"
desc = "A one handed battle axe, still a deadly weapon."
icon_state = "axe"
item_state = "axe"
slot_flags = SLOT_BACK
attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut")
applies_material_colour = 0
drop_sound = 'sound/items/drop/axe.ogg'
pickup_sound = 'sound/items/pickup/axe.ogg'
can_cleave = TRUE
/obj/item/weapon/material/sword/battleaxe/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack")
if(unique_parry_check(user, attacker, damage_source) && prob(10))
user.visible_message("<span class='danger'>\The [user] parries [attack_text] with \the [src]!</span>")
playsound(src, 'sound/weapons/punchmiss.ogg', 50, 1)
return 1
return 0
/obj/item/weapon/material/sword/gladius
name = "gladius"
desc = "An ancient short sword, designed to stab and cut."
icon_state = "gladius"
item_state = "gladius"
applies_material_colour = 0
slot_flags = SLOT_BELT

View File

@@ -235,3 +235,110 @@
prob(5);/obj/item/organ/internal/stomach, prob(5);/obj/item/organ/internal/stomach,
prob(5);/obj/item/organ/internal/voicebox, prob(5);/obj/item/organ/internal/voicebox,
) )
/obj/random/potion
name = "random potion"
desc = "A random potion."
icon_state = "potion"
spawn_nothing_percentage = 0
/obj/random/potion/item_to_spawn()
return pick(prob(20);/obj/item/weapon/reagent_containers/glass/bottle/potion/healing,
prob(4);/obj/item/weapon/reagent_containers/glass/bottle/potion/greater_healing,
prob(20);/obj/item/weapon/reagent_containers/glass/bottle/potion/fire_resist,
prob(20);/obj/item/weapon/reagent_containers/glass/bottle/potion/antidote,
prob(20);/obj/item/weapon/reagent_containers/glass/bottle/potion/water,
prob(8);/obj/item/weapon/reagent_containers/glass/bottle/potion/regeneration,
prob(10);/obj/item/weapon/reagent_containers/glass/bottle/potion/panacea,
prob(10);/obj/item/weapon/reagent_containers/glass/bottle/potion/magic,
prob(10);/obj/item/weapon/reagent_containers/glass/bottle/potion/lightness,
prob(4);/obj/item/weapon/reagent_containers/glass/bottle/potion/SOP,
prob(4);/obj/item/weapon/reagent_containers/glass/bottle/potion/shrink,
prob(4);/obj/item/weapon/reagent_containers/glass/bottle/potion/growth,
prob(20);/obj/item/weapon/reagent_containers/glass/bottle/potion/pain,
prob(10);/obj/item/weapon/reagent_containers/glass/bottle/potion/faerie,
prob(10);/obj/item/weapon/reagent_containers/glass/bottle/potion/relaxation,
prob(10);/obj/item/weapon/reagent_containers/glass/bottle/potion/speed,
prob(10);/obj/item/weapon/reagent_containers/glass/bottle/potion/attractiveness,
prob(4);/obj/item/weapon/reagent_containers/glass/bottle/potion/girljuice,
prob(4);/obj/item/weapon/reagent_containers/glass/bottle/potion/boyjuice,
prob(4);/obj/item/weapon/reagent_containers/glass/bottle/potion/badpolymorph,
prob(2);/obj/item/weapon/reagent_containers/glass/bottle/potion/bonerepair,
prob(1);/obj/item/weapon/reagent_containers/glass/bottle/potion/truepolymorph
)
/obj/random/potion_ingredient
name = "random potion ingredient"
desc = "A random potion."
icon_state = "ingredient"
spawn_nothing_percentage = 0
/obj/random/potion_ingredient/item_to_spawn()
return pick(prob(10);/obj/item/weapon/potion_material/blood_ruby,
prob(2);/obj/item/weapon/potion_material/ruby_eye,
prob(10);/obj/item/weapon/potion_material/golden_scale,
prob(10);/obj/item/weapon/potion_material/frozen_dew,
prob(10);/obj/item/weapon/potion_material/living_coral,
prob(4);/obj/item/weapon/potion_material/rare_horn,
prob(5);/obj/item/weapon/potion_material/moldy_bread,
prob(5);/obj/item/weapon/potion_material/glowing_gem,
prob(5);/obj/item/weapon/potion_material/giant_toe,
prob(2);/obj/item/weapon/potion_material/flesh_of_the_stars,
prob(2);/obj/item/weapon/potion_material/spinning_poppy,
prob(2);/obj/item/weapon/potion_material/salt_mage,
prob(10);/obj/item/weapon/potion_material/golden_grapes,
prob(5);/obj/item/weapon/potion_material/fairy_house,
prob(5);/obj/item/weapon/potion_material/thorny_bulb,
prob(5);/obj/item/weapon/potion_material/ancient_egg,
prob(5);/obj/item/weapon/potion_material/crown_stem,
prob(2);/obj/item/weapon/potion_material/red_ingot,
prob(2);/obj/item/weapon/potion_material/soft_diamond,
prob(2);/obj/item/weapon/potion_material/solid_mist,
prob(1);/obj/item/weapon/potion_material/spider_leg,
prob(1);/obj/item/weapon/potion_material/folded_dark
)
/obj/random/potion_base
name = "random potion base"
desc = "A random potion base."
icon_state = "base"
spawn_nothing_percentage = 0
/obj/random/potion_base/item_to_spawn()
return pick(prob(10);/obj/item/weapon/potion_base/aqua_regia,
prob(10);/obj/item/weapon/potion_base/ichor,
prob(10);/obj/item/weapon/potion_base/alkahest
)
/obj/random/fantasy_item
name = "random fantasy item"
desc = "A random fantasy item."
icon_state = "fantasy"
spawn_nothing_percentage = 0
/obj/random/fantasy_item/item_to_spawn()
return pick(prob(3);/obj/item/device/healthanalyzer/scroll,
prob(10);/obj/item/weapon/gun/energy/taser/magic,
prob(5);/obj/item/weapon/bluespace_harpoon/wand,
prob(10);/obj/item/device/slow_sizegun/magic,
prob(10);/obj/item/clothing/gloves/bluespace/magic,
prob(30);/obj/item/weapon/coin/gold,
prob(30);/obj/item/weapon/coin/silver,
prob(30);/obj/item/weapon/coin/platinum,
prob(20);/obj/item/weapon/material/sword/rapier,
prob(20);/obj/item/weapon/material/sword/longsword,
prob(20);/obj/item/clothing/head/helmet/bucket/wood,
prob(3);/obj/item/weapon/tool/wirecutters/alien/magic,
prob(3);/obj/item/weapon/tool/crowbar/alien/magic,
prob(3);/obj/item/weapon/tool/screwdriver/alien/magic,
prob(3);/obj/item/weapon/weldingtool/alien/magic,
prob(3);/obj/item/weapon/tool/wrench/alien/magic,
prob(3);/obj/item/weapon/surgical/bone_clamp/alien/magic,
prob(10);/obj/item/stack/material/gold,
prob(10);/obj/item/stack/material/silver,
prob(3);/obj/item/weapon/bone/skull,
prob(20);/obj/item/weapon/material/twohanded/staff,
prob(3);/obj/item/weapon/gun/energy/hooklauncher/ring,
prob(3);/obj/item/toy/eight_ball,
prob(3);/obj/item/device/perfect_tele/magic
)

View File

@@ -1441,6 +1441,10 @@
decals = null decals = null
color = COLOR_OFF_WHITE color = COLOR_OFF_WHITE
/decl/closet_appearance/wall_double/wooden
decals = null
color = WOOD_COLOR_RICH
/decl/closet_appearance/wall_double/medical /decl/closet_appearance/wall_double/medical
decals = null decals = null
color = COLOR_OFF_WHITE color = COLOR_OFF_WHITE

View File

@@ -80,6 +80,27 @@
/obj/structure/closet/walllocker/medical/east /obj/structure/closet/walllocker/medical/east
pixel_x = 32 pixel_x = 32
dir = EAST dir = EAST
/obj/structure/closet/walllocker/wooden
name = "wooden cabinet"
desc = "A wall mounted storage cabinet."
closet_appearance = /decl/closet_appearance/wall_double/wooden
/obj/structure/closet/walllocker/wooden/north
pixel_y = 32
dir = SOUTH
/obj/structure/closet/walllocker/wooden/south
pixel_y = -32
dir = NORTH
/obj/structure/closet/walllocker/wooden/west
pixel_x = -32
dir = WEST
/obj/structure/closet/walllocker/wooden/east
pixel_x = 32
dir = EAST
//VOREStation Add End //VOREStation Add End
//double-size "cabinet" lockers, from Killian //double-size "cabinet" lockers, from Killian

View File

@@ -730,6 +730,15 @@
open_sound = 'sound/effects/wooden_closet_open.ogg' open_sound = 'sound/effects/wooden_closet_open.ogg'
close_sound = 'sound/effects/wooden_closet_close.ogg' close_sound = 'sound/effects/wooden_closet_close.ogg'
//Chest
/obj/structure/closet/crate/chest
name = "chest"
desc = "A fancy chest made from wood and lined with red velvet."
icon = 'icons/obj/closets/chest.dmi'
closet_appearance = null
open_sound = 'sound/effects/wooden_closet_open.ogg'
close_sound = 'sound/effects/wooden_closet_close.ogg'
//Mining Cart //Mining Cart
/obj/structure/closet/crate/miningcar /obj/structure/closet/crate/miningcar
name = "mining cart" name = "mining cart"

View File

@@ -170,6 +170,41 @@
return FALSE return FALSE
return TRUE return TRUE
/obj/structure/fence/wood
cuttable = FALSE
name = "fence"
desc = "A wooden fence. Not as effective as a wall, but generally it keeps people out."
description_info = "Projectiles can freely pass fences."
density = TRUE
anchored = TRUE
icon = 'icons/obj/fence.dmi'
icon_state = "wood_straight"
/obj/structure/fence/wood/end
icon_state = "wood_end"
/obj/structure/fence/wood/corner
icon_state = "wood_corner"
/obj/structure/fence/hedge
cuttable = FALSE
name = "hedge"
desc = "A large hedge. Not as effective as a wall, but generally it keeps people out."
description_info = "Projectiles can freely pass fences."
density = TRUE
anchored = TRUE
opacity = 1
icon = 'icons/obj/fence.dmi'
icon_state = "hedge_straight"
/obj/structure/fence/hedge/end
icon_state = "hedge_end"
/obj/structure/fence/hedge/corner
icon_state = "hedge_corner"
#undef CUT_TIME #undef CUT_TIME
#undef CLIMB_TIME #undef CLIMB_TIME

View File

@@ -0,0 +1,52 @@
//props for more fantasy type settings
/obj/structure/prop/fantasy
name = "some fantasy thing"
desc = "My description is broken, bug a developer."
icon = 'icons/obj/props/fantasy.dmi'
density = TRUE
anchored = TRUE
/obj/structure/prop/fantasy/throne
name = "throne"
desc = "An ornate golden throne for the truly pompous."
icon_state = "throne"
/obj/structure/prop/fantasy/anvil
name = "anvil"
desc = "A big solid chunk of cast steel used for smithing."
icon_state = "anvil"
/obj/structure/prop/fantasy/grindstone
name = "grindstone"
desc = "A pedal powered, rough wheel that is used to sharpen and refine metal."
icon_state = "grindstone"
/obj/structure/prop/fantasy/kiln
name = "kiln"
desc = "A large stone furnace."
icon_state = "kiln"
/obj/structure/prop/fantasy/redbanner
name = "tapestry"
desc = "A red tapestry hanging from the wall."
icon_state = "redbanner"
density = FALSE
/obj/structure/prop/fantasy/pinkbanner
name = "tapestry"
desc = "A red tapestry hanging from the wall."
icon_state = "pinkbanner"
density = FALSE
/obj/structure/prop/fantasy/redbanner_standing
name = "banner"
desc = "A red banner hanging from a stand."
icon_state = "redbanner_stand"
density = FALSE
/obj/structure/prop/fantasy/pinkbanner_standing
name = "banner"
desc = "A red banner hanging from a stand."
icon_state = "pinkbanner_stand"
density = FALSE

View File

@@ -388,4 +388,4 @@
if(!anchored) if(!anchored)
to_chat(user,"<span class='notice'> The bed isn't secured.</span>") to_chat(user,"<span class='notice'> The bed isn't secured.</span>")
return return

View File

@@ -124,7 +124,6 @@
else else
to_chat(user, "<span class='notice'>You need a tighter grip.</span>") to_chat(user, "<span class='notice'>You need a tighter grip.</span>")
/obj/structure/urinal /obj/structure/urinal
name = "urinal" name = "urinal"
desc = "The HU-452, an experimental urinal." desc = "The HU-452, an experimental urinal."

View File

@@ -229,3 +229,17 @@ var/list/flesh_overlay_cache = list()
/turf/simulated/wall/wood /turf/simulated/wall/wood
icon_state = "wood" icon_state = "wood"
icon = 'icons/turf/wall_masks_vr.dmi' icon = 'icons/turf/wall_masks_vr.dmi'
/turf/simulated/wall/stonebricks
icon_state = "stonebrick"
icon = 'icons/turf/wall_masks_vr.dmi'
/turf/simulated/wall/stonebricks/Initialize(mapload)
. = ..(mapload, "concrete")
/turf/simulated/wall/stonelogs
icon_state = "stonelogs"
icon = 'icons/turf/wall_masks_vr.dmi'
/turf/simulated/wall/stonelogs/Initialize(mapload)
. = ..(mapload, "concrete",MAT_LOG)

View File

@@ -889,3 +889,175 @@
/area/redgate/train/captain /area/redgate/train/captain
name = "Train Captain's Quarters" name = "Train Captain's Quarters"
icon_state = "purple" icon_state = "purple"
// fantasy areas
/area/redgate/fantasy
name = "Fantasy"
icon_state = "red"
requires_power = 0
/area/redgate/fantasy/streets
name = "Fantasy outside"
icon_state = "red"
/area/redgate/fantasy/tavern
name = "Fantasy tavern"
icon_state = "yellow"
/area/redgate/fantasy/shop
name = "Fantasy shop"
icon_state = "yellow"
/area/redgate/fantasy/alchemist
name = "Fantasy alchemist"
icon_state = "yellow"
/area/redgate/fantasy/castle
name = "Fantasy castle"
icon_state = "yellow"
/area/redgate/fantasy/blacksmith
name = "Fantasy blacksmith"
icon_state = "yellow"
/area/redgate/fantasy/hedgemaze
name = "Fantasy hedgemaze"
icon_state = "green"
/area/redgate/fantasy/butcher
name = "Fantasy butcher"
icon_state = "yellow"
/area/redgate/fantasy/jewler
name = "Fantasy jewler"
icon_state = "yellow"
/area/redgate/fantasy/restaurant
name = "Fantasy restaurant"
icon_state = "yellow"
/area/redgate/fantasy/cafe
name = "Fantasy cafe"
icon_state = "yellow"
/area/redgate/fantasy/house
name = "Fantasy house"
icon_state = "yellow"
/area/redgate/fantasy/gambling
name = "Fantasy gambling den"
icon_state = "yellow"
/area/redgate/fantasy/washhouse
name = "Fantasy wash house"
icon_state = "yellow"
/area/redgate/fantasy/aliens
name = "Fantasy alien house"
icon_state = "purple"
/area/redgate/fantasy/walls
name = "Fantasy green"
icon_state = "green"
/area/redgate/fantasy/guardhouse
name = "Fantasy guard house"
icon_state = "yellow"
/area/redgate/fantasy/mininghouse
name = "Fantasy mining house"
icon_state = "yellow"
/area/redgate/fantasy/farmhouse
name = "Fantasy farm house"
icon_state = "yellow"
/area/redgate/fantasy/church
name = "Fantasy church"
icon_state = "yellow"
/area/redgate/fantasy/churchhouse
name = "Fantasy church house"
icon_state = "yellow"
/area/redgate/fantasy/arena
name = "Fantasy arena"
icon_state = "yellow"
/area/redgate/fantasy/redgate
name = "Fantasy redgate"
icon_state = "yellow"
/area/redgate/fantasy/paladinhouse
name = "Fantasy paladin house"
icon_state = "yellow"
/area/redgate/fantasy/druid
name = "Fantasy druid house"
icon_state = "yellow"
/area/redgate/fantasy/bard
name = "Fantasy bard house"
icon_state = "yellow"
/area/redgate/fantasy/rogue
name = "Fantasy rogue house"
icon_state = "yellow"
/area/redgate/fantasy/grocery
name = "Fantasy grocery store"
icon_state = "yellow"
/area/redgate/fantasy/bakery
name = "Fantasy bakery"
icon_state = "yellow"
/area/redgate/fantasy/barbarian
name = "Fantasy barbarian house"
icon_state = "yellow"
/area/redgate/fantasy/ranger
name = "Fantasy ranger house"
icon_state = "yellow"
/area/redgate/fantasy/ratbasement
name = "Fantasy rat infested basement"
icon_state = "yellow"
/area/redgate/fantasy/underground
name = "Fantasy underground"
icon_state = "red"
/area/redgate/fantasy/dungeon
name = "Fantasy dungeon"
icon_state = "yellow"
/area/redgate/fantasy/underwater
name = "Fantasy underwater"
icon_state = "bluenew"
/area/redgate/fantasy/crypt
name = "Fantasy crypt"
icon_state = "green"
/area/redgate/fantasy/caves
name = "Fantasy caves"
icon_state = "yellow"
/area/redgate/fantasy/alienbasement
name = "Fantasy alien basement"
icon_state = "yellow"
/area/redgate/fantasy/dark
name = "Fantasy dark"
icon_state = "green"
/area/redgate/fantasy/mines
name = "Fantasy house"
icon_state = "green"

View File

@@ -0,0 +1,151 @@
/obj/item/weapon/reagent_containers/glass/bottle/potion
name = "healing potion"
desc = "A small green bottle containing some red liquid that claims to heal injuries."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle-5"
prefill = list("bicaridine" = 30)
/obj/item/weapon/reagent_containers/glass/bottle/potion/healing
/obj/item/weapon/reagent_containers/glass/bottle/potion/greater_healing
name = "greater healing potion"
desc = "A small green bottle containing some thick red liquid that claims to rapidly heal injuries."
prefill = list("vermicetol" = 30)
/obj/item/weapon/reagent_containers/glass/bottle/potion/fire_resist
name = "fire resistance potion"
desc = "A small green bottle containing some orange liquid that claims to protect the drinker from fire."
prefill = list("dermaline" = 15, "kelotane" = 15)
/obj/item/weapon/reagent_containers/glass/bottle/potion/antidote
name = "antidote potion"
desc = "A small green bottle containing some green liquid that claims to cure poisoning."
prefill = list("anti_toxin" = 30)
/obj/item/weapon/reagent_containers/glass/bottle/potion/water
name = "water breathing potion"
desc = "A small green bottle containing some blue liquid that claims to allow the drinker to breathe under water."
prefill = list("dexalinp" = 30)
/obj/item/weapon/reagent_containers/glass/bottle/potion/regeneration
name = "regeneration potion"
desc = "A small green bottle containing some purple liquid that claims to regenerate severe wounds."
prefill = list("peridaxon" = 30)
/obj/item/weapon/reagent_containers/glass/bottle/potion/panacea
name = "panacea potion"
desc = "A small green bottle containing some white liquid that claims to cure all ailments."
prefill = list("spaceacillin" = 30)
/obj/item/weapon/reagent_containers/glass/bottle/potion/magic
name = "magic resistence potion"
desc = "A small green bottle containing some dark green liquid that claims to cure magical effects."
prefill = list("hyronalin" = 30)
/obj/item/weapon/reagent_containers/glass/bottle/potion/lightness
name = "feather weight potion"
desc = "A small green bottle containing some mysterious liquid that claims to make you feel lighter."
prefill = list("ickypak" = 30)
/obj/item/weapon/reagent_containers/glass/bottle/potion/SOP
name = "standard operating potion"
desc = "A small green bottle containing some yellow liquid that claims to be important."
prefill = list("myelamine" = 30)
/obj/item/weapon/reagent_containers/glass/bottle/potion/shrink
name = "diminution potion"
desc = "A small green bottle containing some swirling cyan liquid that claims to reduce the drinkers stature."
prefill = list("microcillin" = 1)
/obj/item/weapon/reagent_containers/glass/bottle/potion/growth
name = "fire giant potion"
desc = "A small green bottle containing some bubbling yellow liquid that claims to turn the drinker into a fire giant."
prefill = list("macrocillin" = 1, "capsaicin" = 5)
/obj/item/weapon/reagent_containers/glass/bottle/potion/pain
name = "grit potion"
desc = "A small green bottle containing some thin purple liquid that claims to power through even the most perilous injuries."
prefill = list("tramadol" = 30)
/obj/item/weapon/reagent_containers/glass/bottle/potion/faerie
name = "faerie dance potion"
desc = "A small green bottle containing some swishing pink liquid that claims to help you open your mind."
prefill = list("psilocybin" = 30)
/obj/item/weapon/reagent_containers/glass/bottle/potion/relaxation
name = "relaxation potion"
desc = "A small green bottle containing some still green liquid that claims to make everything feel just fine, really."
prefill = list("ambrosia_extract" = 30)
/obj/item/weapon/reagent_containers/glass/bottle/potion/speed
name = "blinding speed potion"
desc = "A small green bottle containing some bubbling orange liquid that claims to make you move at incredible speeds."
prefill = list("hyperzine" = 30)
/obj/item/weapon/reagent_containers/glass/bottle/potion/attractiveness
name = "love potion"
desc = "A small green bottle containing some light mint coloured liquid that claims to make you more attractive to potential partners."
prefill = list("menthol" = 30)
/obj/item/weapon/reagent_containers/glass/bottle/potion/girljuice
name = "girl transformation potion"
desc = "A small green bottle containing some pretty pink liquid that claims to turn the drinker into a woman."
prefill = list("gynorovir" = 1)
/obj/item/weapon/reagent_containers/glass/bottle/potion/boyjuice
name = "boy transformation potion"
desc = "A small green bottle containing some strong blue liquid that claims to turn the drinker into a man."
prefill = list("androrovir" = 1)
/obj/item/weapon/reagent_containers/glass/bottle/potion/badpolymorph
name = "unstable polymorph potion"
desc = "A small green bottle containing some uncomfortably green liquid that claims to transform the drinker wildly."
prefill = list("mutagen" = 30)
/obj/item/weapon/reagent_containers/glass/bottle/potion/bonerepair
name = "mending potion"
desc = "A small green bottle containing some pale blue liquid that claims to fix that which is broken."
prefill = list("osteodaxon" = 1)
/obj/item/weapon/reagent_containers/glass/bottle/potion/truepolymorph
name = "polymorph potion"
desc = "A small green bottle containing some strange purple liquid that claims to transform the drinker."
prefill = list("polymorph" = 1)
//Failed potions
/obj/item/weapon/reagent_containers/glass/bottle/potion/plain
name = "plain potion"
desc = "A small green bottle containing some plain transparent liquid."
prefill = list("water" = 30)
/obj/item/weapon/reagent_containers/glass/bottle/potion/ethanol
name = "thin potion"
desc = "A small green bottle containing some thin transparent liquid with a solvent scent."
prefill = list("ethanol" = 30)
/obj/item/weapon/reagent_containers/glass/bottle/potion/sugar
name = "sweet potion"
desc = "A small green bottle containing some white translucent liquid with a sweet scent."
prefill = list("sugar" = 30)
/obj/item/weapon/reagent_containers/glass/bottle/potion/capsaicin
name = "warm potion"
desc = "A small green bottle containing some red liquid."
prefill = list("capsaicin" = 30)
/obj/item/weapon/reagent_containers/glass/bottle/potion/soporific
name = "still potion"
desc = "A small green bottle containing some calm blue liquid."
prefill = list("stoxin" = 30)
/obj/item/weapon/reagent_containers/glass/bottle/potion/lipostipo
name = "thick potion"
desc = "A small green bottle containing some thick viscous liquid."
prefill = list("lipostipo" = 30)
/obj/item/weapon/reagent_containers/glass/bottle/potion/phoron
name = "volatile potion"
desc = "A small green bottle containing some volatile purple liquid."
prefill = list("phoron" = 10)

View File

@@ -664,4 +664,5 @@
for(var/M in workingList) for(var/M in workingList)
if(istype(M, circuit)) // Yes, we remove circuit twice. Yes, it's necessary. Yes, it's stupid. if(istype(M, circuit)) // Yes, we remove circuit twice. Yes, it's necessary. Yes, it's stupid.
workingList -= M workingList -= M
return workingList return workingList

View File

@@ -956,6 +956,77 @@
/datum/say_list/catslug/custom/pilotslug /datum/say_list/catslug/custom/pilotslug
speak = list("In the pipe, five my five.","Kick the tires and light the fires!","Bogeys on my tail!","GOOSE!","I'm really good at the stick.","I'm not doing nothing.","Heh.","Can you keep up?","Can't keep the sky from me.") speak = list("In the pipe, five my five.","Kick the tires and light the fires!","Bogeys on my tail!","GOOSE!","I'm really good at the stick.","I'm not doing nothing.","Heh.","Can you keep up?","Can't keep the sky from me.")
//Royal slug
/mob/living/simple_mob/vore/alienanimals/catslug/custom/royalslug
name = "Ruler Purrton"
desc = "A golden-furred noodley bodied creature with thin arms and legs, and gloomy dark eyes. This one is adorned with a crown and red cloak, very fancy."
tt_desc = "Mollusca Felis Royallis"
icon_state = "catslugking"
icon_living = "catslugking"
icon_rest = "catslugking_rest"
icon_dead = "catslugking_dead"
catalogue_data = list(/datum/category_item/catalogue/fauna/catslug/custom/royalslug)
say_list_type = /datum/say_list/catslug/custom/royalslug
/datum/category_item/catalogue/fauna/catslug/custom/royalslug
name = "Alien Wildlife - Catslug - Ruler Purrton"
desc = "Found in a castle beyond the redgate, Ruler Purrton\
is a catslug who spends their days presiding over this low \
technology town, living a life of luxury. Always seen with \
their trademark crown and cloak, this litter critter seems \
to just exude raw confidence and superiority. \
\
The Catslug is an omnivorous terrestrial creature.\
Exhibiting properties of both a cat and a slug (hence its name)\
it moves somewhat awkwardly. However, the unique qualities of\
its body make it exceedingly flexible and smooth, allowing it to\
wiggle into and move effectively in even extremely tight spaces.\
Additionally, it has surprisingly capable hands, and moves quite\
well on two legs or four. Caution is advised when interacting\
with these creatures, they are quite intelligent, and proficient\
tool users."
value = CATALOGUER_REWARD_TRIVIAL
/datum/say_list/catslug/custom/royalslug
speak = list("Let them eat cake. Lots and lots of cake.", "Fetch my good cloak.", "I myself prefer my ancient eggs for breakfast!", "Have you come to pay tribute?", "How dare you intrude?", "Bring me the finest of fine finery.", "HARK!", "With great power comes great dinner.")
//crypt slug
/mob/living/simple_mob/vore/alienanimals/catslug/custom/cryptslug
name = "Keeper Sluguloth"
desc = "A dark-furred noodley bodied creature with thin arms and legs, and gloomy dark eyes. This one is adorned with a dark cloak that obscures most of it's body."
tt_desc = "Mollusca Felis Necrosis"
icon_state = "cryptslug"
icon_living = "cryptslug"
icon_rest = "cryptslug_rest"
icon_dead = "cryptslug_dead"
catalogue_data = list(/datum/category_item/catalogue/fauna/catslug/custom/cryptslug)
say_list_type = /datum/say_list/catslug/custom/cryptslug
/datum/category_item/catalogue/fauna/catslug/custom/cryptslug
name = "Alien Wildlife - Catslug - Keeper Sluguloth"
desc = "Found in a deep beneath a town beyond the redgate, Sluguloth\
is a catslug who spends their days lurking within dark dungeons \
alongside monstrous beings of all sorts. Always seen within \
their dark cloak, obscuring them, this litter critter seems \
to just exude pure menance and up-to-no-goodness. \
\
The Catslug is an omnivorous terrestrial creature.\
Exhibiting properties of both a cat and a slug (hence its name)\
it moves somewhat awkwardly. However, the unique qualities of\
its body make it exceedingly flexible and smooth, allowing it to\
wiggle into and move effectively in even extremely tight spaces.\
Additionally, it has surprisingly capable hands, and moves quite\
well on two legs or four. Caution is advised when interacting\
with these creatures, they are quite intelligent, and proficient\
tool users."
value = CATALOGUER_REWARD_TRIVIAL
/datum/say_list/catslug/custom/cryptslug
speak = list("I have a lot of nasty friends.", "Do not test me.", "I shall rise again!", "How dare you step foot in my domain?", "Dare you indluge in dark desires?", "I am become death, one day.", "Foul creature!", "I used to think my life was a tragedy, but now I realize it's kind of okay actually.")
//============================= //=============================
//Admin-spawn only catslugs end //Admin-spawn only catslugs end
//============================= //=============================

View File

@@ -0,0 +1,55 @@
/mob/living/simple_mob/vore/bat
name = "giant bat"
desc = "Blimey, that's a big sky fox."
tt_desc = "Homo paramour"
icon_state = "bat"
icon = 'icons/mob/vore.dmi'
harm_intent_damage = 5
melee_damage_lower = 2
melee_damage_upper = 5
response_help = "nuzzles"
response_disarm = "flaps at"
response_harm = "bites"
attacktext = list("bites","scratches")
say_list_type = /datum/say_list/bat
ai_holder_type = /datum/ai_holder/simple_mob/retaliate
faction = "vampire"
// Activate Noms!
/mob/living/simple_mob/vore/bat
vore_active = 1
vore_bump_chance = 50
vore_pounce_chance = 50
vore_standing_too = 1
vore_ignores_undigestable = 0
vore_default_mode = DM_DRAIN // They just want to drain you!
vore_digest_chance = 25 // But don't you dare try to escape...
vore_icons = SA_ICON_LIVING | SA_ICON_REST
/datum/say_list/bat
speak = list("Chirp!")
emote_hear = list("chirps","pings","clicks")
emote_see = list("flaps","grooms itself")
/mob/living/simple_mob/vore/bat/init_vore()
..()
var/obj/belly/B = vore_selected
B.name = "stomach"
B.desc = "The giant bat has managed to swallow you alive, which is particularly impressive given that it's still a rather small creature. It's belly bulges out as you're squeezed into the oppressively tight stomach, and it lands to manage the weight, wings curling over your form beneath. The body groans under your strain, burbling and growling as it gets to work on it's feed. However, at least for now, it seems to do you no physical harm. Instead, the damp walls that squelch across your body try to leech out your energy through some less direct means."
B.mode_flags = DM_FLAG_THICKBELLY
B.belly_fullscreen = "yet_another_tumby"
B.digest_brute = 2
B.digest_burn = 2
B.digest_oxy = 1
B.digestchance = 25
B.absorbchance = 0
B.escapechance = 15
B.selective_preference = DM_DRAIN
B.escape_stun = 5

View File

@@ -0,0 +1,132 @@
/mob/living/simple_mob/vore/cryptdrake
name = "crypt drake"
desc = "A massive drake-like creature with dark purple scales and a seemingly exposed skull."
catalogue_data = list(/datum/category_item/catalogue/fauna/greatwolf)
tt_desc = "Draconis necrotis"
icon = 'icons/mob/vore128x64.dmi'
icon_dead = "cryptdrake-dead"
icon_living = "cryptdrake"
icon_state = "cryptdrake"
icon_rest = "cryptdrake"
faction = "dragon"
old_x = -48
old_y = 0
vis_height = 92
melee_damage_lower = 20
melee_damage_upper = 15
friendly = list("nudges", "sniffs on", "rumbles softly at", "nuzzles")
default_pixel_x = -48
pixel_x = -48
pixel_y = 0
response_help = "bumps"
response_disarm = "shoves"
response_harm = "bites"
movement_cooldown = -1
harm_intent_damage = 10
melee_damage_lower = 10
melee_damage_upper = 20
maxHealth = 1000
attacktext = list("mauled")
see_in_dark = 8
minbodytemp = 0
ai_holder_type = /datum/ai_holder/simple_mob/vore
max_buckled_mobs = 1
mount_offset_y = 32
mount_offset_x = -16
can_buckle = TRUE
buckle_movable = TRUE
buckle_lying = FALSE
max_tox = 0 // immune to poison
special_attack_min_range = 2
special_attack_max_range = 4
special_attack_cooldown = 30 SECONDS
var/leap_warmup = 2 SECOND // How long the leap telegraphing is.
var/leap_sound = 'sound/weapons/spiderlunge.ogg'
/mob/living/simple_mob/vore/cryptdrake
vore_bump_chance = 25
vore_digest_chance = 50
vore_escape_chance = 5
vore_pounce_chance = 100
vore_active = 1
vore_icons = 2
vore_icons = SA_ICON_LIVING | SA_ICON_REST
vore_capacity = 2
swallowTime = 50
vore_ignores_undigestable = TRUE
vore_default_mode = DM_DIGEST
vore_pounce_maxhealth = 125
vore_bump_emote = "tries to devour"
/mob/living/simple_mob/vore/cryptdrake/Login()
. = ..()
if(!riding_datum)
riding_datum = new /datum/riding/simple_mob(src)
verbs |= /mob/living/simple_mob/proc/animal_mount
verbs |= /mob/living/proc/toggle_rider_reins
movement_cooldown = -1
/mob/living/simple_mob/vore/cryptdrake/init_vore()
. = ..()
var/obj/belly/B = vore_selected
B.name = "stomach"
B.desc = "The enormous beast snaps it's boney jaws around your form, effortlessly lifting you from the ground. Throwing it's head backwards, your body is tossed up momentarily as the maw parts wider, only for you to descend rapidly moments later. You're caught in the creature's throat for a moment, contracting dark purple flesh holding tightly onto you, there's no going back at this point. The peristaltic motions squeeze you down this tunnel towards your final destination, where you're soon relieved of the intense squelching to be pushed into a move flexible, stretching chamber. Immediately coated in caustic oozes, the world around you seems more than eager to ensure that you're soaked over every inch, wrinkled walls twisting and grinding around your body. The drake's stomach clenches and compresses over you rhythmically, attempting to eagerly add you to the soup of fluids that fill this sloshing gut. Omnipresent sounds of groaning, gurgling and burbling bodily functions signify just how active this process already is."
B.vore_sound = "Tauric Swallow"
B.release_sound = "Pred Escape"
B.mode_flags = DM_FLAG_THICKBELLY
B.fancy_vore = 1
B.selective_preference = DM_DIGEST
B.vore_verb = "devour"
B.digest_brute = 3
B.digest_burn = 2
B.digest_oxy = 0
B.digestchance = 50
B.absorbchance = 0
B.escapechance = 3
B.escape_stun = 5
B.contamination_color = "grey"
B.contamination_flavor = "Wet"
B.emote_lists[DM_DIGEST] = list(
"The drake growls in annoyance before clenching those wrinkled walls tight against your form, grinding away at you!",
"As the beast wanders about, you're forced to slip and slide around amidst a pool of thick digestive goop, sinking briefly into the thick, heavy walls!",
"You can barely hear the drake let out a pleased rumble as its stomach eagerly gurgles around its newfound meal!",
"As the thinning air begins to make you feel dizzy, menacing bworps and grumbles fill that dark, constantly shifting organ!",
"The constant, rhythmic kneading and massaging starts to take its toll along with the muggy heat, making you feel weaker and weaker!",
"The drake happily wanders around while digesting its meal, almost like it is trying to show off the hanging gut you've given it. Not like it made much of a difference on his already borderline obese form anyway~")
/mob/living/simple_mob/vore/cryptdrake/do_special_attack(atom/A) //Mostly copied from hunter.dm
set waitfor = FALSE
if(!isliving(A))
return FALSE
var/mob/living/L = A
if(!L.devourable || !L.allowmobvore || !L.can_be_drop_prey || !L.throw_vore || L.unacidable)
return FALSE
set_AI_busy(TRUE)
visible_message(span("warning","\The [src]'s eyes flash ominously!"))
to_chat(L, span("danger","\The [src] focuses on you!"))
// Telegraph, since getting stunned suddenly feels bad.
do_windup_animation(A, leap_warmup)
sleep(leap_warmup) // For the telegraphing.
if(L.z != z) //Make sure you haven't disappeared to somewhere we can't go
set_AI_busy(FALSE)
return FALSE
// Do the actual leap.
status_flags |= LEAPING // Lets us pass over everything.
visible_message(span("critical","\The [src] leaps at \the [L]!"))
throw_at(get_step(L, get_turf(src)), special_attack_max_range+1, 1, src)
playsound(src, leap_sound, 75, 1)
sleep(5) // For the throw to complete. It won't hold up the AI ticker due to waitfor being false.
if(status_flags & LEAPING)
status_flags &= ~LEAPING // Revert special passage ability.
set_AI_busy(FALSE)
if(Adjacent(L)) //We leapt at them but we didn't manage to hit them, let's see if we're next to them
L.Weaken(2) //get knocked down, idiot

View File

@@ -0,0 +1,72 @@
/mob/living/simple_mob/vore/peasant
name = "peasant"
desc = "They're just about getting by."
tt_desc = "Homo Sapiens"
icon_state = "peasantfa"
icon = 'icons/mob/vore.dmi'
harm_intent_damage = 2
melee_damage_lower = 1
melee_damage_upper = 2
response_help = "pats"
response_disarm = "pushes"
response_harm = "punches"
attacktext = list("punched","kicked")
say_list_type = /datum/say_list/peasant
ai_holder_type = /datum/ai_holder/simple_mob/retaliate
var/random_skin = 1
var/list/skins = list(
"peasantfa",
"peasantfb",
"peasantfc",
"peasantma",
"peasantmb"
)
faction = "peasant"
/mob/living/simple_mob/vore/peasant/New()
..()
if(random_skin)
icon_living = pick(skins)
icon_rest = "[icon_living]asleep"
icon_dead = "[icon_living]-dead"
update_icon()
// Activate Noms!
/mob/living/simple_mob/vore/peasant
vore_active = 1
vore_bump_chance = 10
vore_pounce_chance = 20
vore_standing_too = 1
vore_ignores_undigestable = 0
vore_default_mode = DM_HOLD
vore_digest_chance = 25 // But don't you dare try to escape...
vore_icons = SA_ICON_LIVING | SA_ICON_REST
/datum/say_list/peasant
speak = list("Fine day!","What was I doing again? Oh yeah, nothing.","How are ya?","I sure do love bread.","Where did I leave my scraps of cloth?","Sure is a good time to exist, I guess.")
emote_hear = list("yawns","'s stomach grumbles","shuffles")
emote_see = list("exists","just stands there","smiles","looks around")
/mob/living/simple_mob/vore/peasant/init_vore()
..()
var/obj/belly/B = vore_selected
B.name = "stomach"
B.desc = "You've somehow managed to get yourself eaten by one of the local peasants. After jamming you down into their stomach, you find yourself cramped up tight in a space that clearly shouldn't be able to accept you. They let out a relieved sigh as they heft around their new found weight, giving it a hearty pat, clearly content to get a good meal for once. The world around you groans and grumbles, but the gut is far from harmful to you right now, even as the walls clench down on your body."
B.mode_flags = DM_FLAG_THICKBELLY
B.belly_fullscreen = "yet_another_tumby"
B.digest_brute = 1
B.digest_burn = 1
B.digest_oxy = 0
B.digestchance = 25
B.absorbchance = 0
B.escapechance = 15
B.selective_preference = DM_HOLD
B.escape_stun = 5

View File

@@ -0,0 +1,73 @@
/mob/living/simple_mob/vore/succubus
name = "succubus"
desc = "She's giving you the 'come hither' look."
tt_desc = "Homo paramour"
icon_state = "succubus"
icon = 'icons/mob/vore.dmi'
harm_intent_damage = 5
melee_damage_lower = 2
melee_damage_upper = 5
response_help = "strokes"
response_disarm = "pushes"
response_harm = "bites"
attacktext = list("swatted","bapped")
say_list_type = /datum/say_list/succubus
ai_holder_type = /datum/ai_holder/simple_mob/retaliate
var/random_skin = 1
var/list/skins = list(
"succubus",
"succubusbob",
"succubusginger",
"succubusclothed",
"succubusbobclothed",
"succubusgingerclothed"
)
faction = "succubus"
/mob/living/simple_mob/vore/succubus/New()
..()
if(random_skin)
icon_living = pick(skins)
icon_rest = "[icon_living]asleep"
icon_dead = "[icon_living]-dead"
update_icon()
// Activate Noms!
/mob/living/simple_mob/vore/succubus
vore_active = 1
vore_bump_chance = 100
vore_pounce_chance = 50
vore_standing_too = 1
vore_ignores_undigestable = 0
vore_default_mode = DM_DRAIN // They just want to drain you!
vore_digest_chance = 25 // But don't you dare try to escape...
vore_icons = SA_ICON_LIVING | SA_ICON_REST
/datum/say_list/succubus
speak = list("Come here cutie!","Let me get a good look at you!","Want to spend a little quality time together?","I don't bite. Much.","Like what you see?","Feel free to sample the goods.")
emote_hear = list("makes a kissing sound","giggles","lets out a needy whine")
emote_see = list("gestures for you to come over","winks","smiles","stretches")
/mob/living/simple_mob/vore/succubus/init_vore()
..()
var/obj/belly/B = vore_selected
B.name = "stomach"
B.desc = "You find yourself tightly compressed into the stomach of the succubus, with immense pressure squeezing down on you from every direction. The wrinkled walls of the gut knead over you, like a swelteringly hot, wet massage. You can feel movement from the outside, as though the demoness is running her hands over your form with delight. The world around you groans and gurgles, but the fluids that ooze into this place don't seem harmful, yet. Instead, you feel your very energy being steadily depleted, much to the joy of the woman who's claiming it all for herself."
B.mode_flags = DM_FLAG_THICKBELLY
B.belly_fullscreen = "yet_another_tumby"
B.digest_brute = 2
B.digest_burn = 2
B.digest_oxy = 1
B.digestchance = 25
B.absorbchance = 0
B.escapechance = 15
B.selective_preference = DM_DRAIN
B.escape_stun = 5

View File

@@ -0,0 +1,85 @@
/mob/living/simple_mob/vore/vampire
name = "vampire"
desc = "A large creature with a humanoid upperbody and more feral formed lower body, with four legs and two arms."
icon_state = "count"
icon = 'icons/mob/vore.dmi'
harm_intent_damage = 8
melee_damage_lower = 3
melee_damage_upper = 7
response_help = "caresses"
response_disarm = "wafts"
response_harm = "bites"
attacktext = list("bites","sucks","drinks from")
say_list_type = /datum/say_list/count
ai_holder_type = /datum/ai_holder/simple_mob/vore
var/random_skin = 1
var/list/skins = list(
"count",
"countess",
"countnude",
"countessnude"
)
faction = "vampire"
/mob/living/simple_mob/vore/vampire/New()
..()
if(random_skin)
icon_living = pick(skins)
icon_rest = "[icon_living]asleep"
icon_dead = "[icon_living]-dead"
update_icon()
// Activate Noms!
/mob/living/simple_mob/vore/vampire
vore_active = 1
vore_bump_chance = 10
vore_pounce_chance = 50
vore_standing_too = 1
vore_ignores_undigestable = 0
vore_default_mode = DM_DRAIN
vore_digest_chance = 25
vore_icons = SA_ICON_LIVING | SA_ICON_REST
/datum/say_list/count
speak = list("I vant to suck your-","I'm going to get a bite to drink.","All I have is time.","Your presence here is crypt-ic.","I like my coffee decoffinated.","There is bad blood between us.")
emote_hear = list("laughs maniacally","croans","hisses")
emote_see = list("wafts about","licks their lips","flaps a bit")
/mob/living/simple_mob/vore/vampire/init_vore()
..()
var/obj/belly/B = vore_selected
B.name = "stomach"
B.desc = "Having been rapidly gulped up by the vampire, you find yourself tightly contained with a set of groaning, wrinkled walls. It seems that the beast has decided against draining your lifeforce through you blood, and instead taking a more direct approach as it saps your strength from all around you. Your attacker seems content to just take that essence for now, but it is a gut afterall and struggling may set it off."
B.mode_flags = DM_FLAG_THICKBELLY
B.belly_fullscreen = "yet_another_tumby"
B.digest_brute = 3
B.digest_burn = 0
B.digest_oxy = 1
B.digestchance = 25
B.absorbchance = 0
B.escapechance = 10
B.selective_preference = DM_DRAIN
B.escape_stun = 5
/mob/living/simple_mob/vore/vampire/count
random_skin = 0
icon_state = "count"
/mob/living/simple_mob/vore/vampire/countess
random_skin = 0
icon_state = "countess"
/mob/living/simple_mob/vore/vampire/count_nude
random_skin = 0
icon_state = "countnude"
/mob/living/simple_mob/vore/vampire/countess_nude
random_skin = 0
icon_state = "countessnude"

View File

@@ -221,4 +221,28 @@
icon_state = "big_flamp-construct-stage2" icon_state = "big_flamp-construct-stage2"
if(3) if(3)
icon_state = "big_flamp-empty" icon_state = "big_flamp-empty"
*/ */
/obj/item/weapon/light/bulb/torch
brightness_range = 6
color = "#fabf87"
brightness_color = "#fabf87"
init_brightness_range = 6
/obj/machinery/light/small/torch
icon = 'icons/obj/lighting_vr.dmi'
name = "wall torch"
icon_state = "torch1"
base_state = "torch"
desc = "A small torch held in a wall sconce."
light_type = /obj/item/weapon/light/bulb/torch
shows_alerts = FALSE
anchored = TRUE
plane = ABOVE_MOB_PLANE
layer = ABOVE_MOB_LAYER
construct_type = null
overlay_color = LIGHT_COLOR_INCANDESCENT_BULB
overlay_above_everything = TRUE
/obj/machinery/light/small/torch/attackby()
return

View File

@@ -0,0 +1,315 @@
/obj/machinery/alembic
name = "Alembic"
desc = "A piece of glass chemical apparatus that is used to distill and concentrate chemicals."
icon = 'icons/obj/chemical.dmi'
icon_state = "alembic"
use_power = FALSE
anchored = TRUE
density = FALSE
layer = ABOVE_WINDOW_LAYER
vis_flags = VIS_HIDE
unacidable = TRUE
clicksound = "button"
clickvol = 60
var/potion_reagent = 0
var/bubbling = 0
var/base_reagent = 0
var/product_potion = 0
var/expected_base = 0
/obj/machinery/alembic/update_icon()
if(potion_reagent == 0 && base_reagent == 0) //Empty
icon_state = "alembic"
else if(potion_reagent != 0 && base_reagent == 0) //Has potion reagent but not base
icon_state = "alembic-base"
else if(potion_reagent == 0 && base_reagent != 0) //Has a base but no reagent
icon_state = "alembic-base"
else if(potion_reagent != 0 && base_reagent != 0 && !bubbling ) //Has a reagent but is not turned on
icon_state = "alembic-full"
else if(bubbling == 1) //is actively bubbling
icon_state = "alembic-bubble"
return
/obj/machinery/alembic/attackby(var/obj/item/weapon/potion_material/O as obj, var/mob/user as mob)
if(istype(O,/obj/item/weapon/potion_material))
if(potion_reagent != 0 )
to_chat(user, SPAN_WARNING("There is already a reagent in the alembic!"))
return
else
src.potion_reagent = O
src.expected_base = O.base_reagent
src.product_potion = O.product_potion
user.drop_item()
O.loc = src
update_icon()
to_chat(user, SPAN_NOTICE("You place the [O] in the alembic."))
src.updateUsrDialog()
return
else if(istype(O,/obj/item/weapon/potion_base))
if(base_reagent != 0 )
to_chat(user, SPAN_WARNING("There is already a base in the alembic!"))
return
else
src.base_reagent = O
user.drop_item()
O.loc = src
update_icon()
to_chat(user, SPAN_NOTICE("You place the [O] in the alembic."))
src.updateUsrDialog()
return
else
to_chat(user, SPAN_WARNING("This item is no use in the alembic."))
return
/obj/machinery/alembic/attack_hand(mob/user as mob)
if(potion_reagent == 0 || base_reagent == 0) //If there is nothing in there
to_chat(user, SPAN_WARNING("The alembic is not yet full!"))
return
else if(potion_reagent != 0 && base_reagent != 0 && !bubbling) //if there is something in there and it's not bubbling yet
bubbling = 1
update_icon()
to_chat(user, SPAN_NOTICE("The alembic begins boiling the [potion_reagent] in the [base_reagent]."))
sleep(30)
bubbling = 0
to_chat(user, SPAN_NOTICE("The alembic finishes brewing the potion!"))
spawn_potion()
potion_reagent = 0
base_reagent = 0
update_icon()
return
else if(bubbling)
to_chat(user, SPAN_WARNING("The alembic is already boiling!"))
return
/obj/machinery/alembic/AltClick(mob/user)
if(potion_reagent == 0)
to_chat(user, SPAN_WARNING("There is nothing in the alembic!"))
return
else if(potion_reagent != 0 && !bubbling) //if there is something in there and it's not bubbling yet
if(!user.incapacitated() && Adjacent(user))
user.put_in_hands(potion_reagent)
potion_reagent = 0
update_icon()
else
return
else if(bubbling)
to_chat(user, SPAN_WARNING("The alembic is already boiling, it's too late to get your reagent back!"))
return
/obj/machinery/alembic/proc/spawn_potion()
if(istype(base_reagent,expected_base))
new product_potion(loc)
else
var/failed_product = pick(/obj/item/weapon/reagent_containers/glass/bottle/potion/plain,
/obj/item/weapon/reagent_containers/glass/bottle/potion/ethanol,
/obj/item/weapon/reagent_containers/glass/bottle/potion/sugar,
/obj/item/weapon/reagent_containers/glass/bottle/potion/capsaicin,
/obj/item/weapon/reagent_containers/glass/bottle/potion/soporific,
/obj/item/weapon/reagent_containers/glass/bottle/potion/lipostipo,
/obj/item/weapon/reagent_containers/glass/bottle/potion/phoron)
new failed_product(loc)
//The actual ingredients!
/obj/item/weapon/potion_material
name = "blood ruby"
desc = "An extremely hard but oddly brittle gem with a beautiful red colouration."
icon = 'icons/obj/chemical_potionreagents.dmi'
icon_state = "blood_ruby"
var/base_reagent = /obj/item/weapon/potion_base/ichor
var/product_potion = /obj/item/weapon/reagent_containers/glass/bottle/potion/healing
/obj/item/weapon/potion_material/blood_ruby
/obj/item/weapon/potion_material/ruby_eye
name = "ruby eye"
desc = "An odd gem in the shape of an eye, it has a strange static charge to the surface."
icon = 'icons/obj/chemical_potionreagents.dmi'
icon_state = "ruby_eye"
base_reagent = /obj/item/weapon/potion_base/ichor
product_potion = /obj/item/weapon/reagent_containers/glass/bottle/potion/greater_healing
/obj/item/weapon/potion_material/golden_scale
name = "golden scale"
desc = "A reptilian scale with an almost metalic texture and a shining gold surface."
icon = 'icons/obj/chemical_potionreagents.dmi'
icon_state = "golden_scale"
base_reagent = /obj/item/weapon/potion_base/alkahest
product_potion = /obj/item/weapon/reagent_containers/glass/bottle/potion/fire_resist
/obj/item/weapon/potion_material/frozen_dew
name = "frozen dew"
desc = "A bitter leaf with a small droplet of crystalised dew attached to it."
icon = 'icons/obj/chemical_potionreagents.dmi'
icon_state = "frozen_dew"
base_reagent = /obj/item/weapon/potion_base/ichor
product_potion = /obj/item/weapon/reagent_containers/glass/bottle/potion/antidote
/obj/item/weapon/potion_material/living_coral
name = "living coral"
desc = "Some coral that appears to be friving outside of the water, it has an oddly metallic scent."
icon = 'icons/obj/chemical_potionreagents.dmi'
icon_state = "living_coral"
base_reagent = /obj/item/weapon/potion_base/aqua_regia
product_potion = /obj/item/weapon/reagent_containers/glass/bottle/potion/water
/obj/item/weapon/potion_material/rare_horn
name = "rare horn"
desc = "A sharp, straight horn from some unknown animal."
icon = 'icons/obj/chemical_potionreagents.dmi'
icon_state = "rare_horn"
base_reagent = /obj/item/weapon/potion_base/alkahest
product_potion = /obj/item/weapon/reagent_containers/glass/bottle/potion/regeneration
/obj/item/weapon/potion_material/moldy_bread
name = "moldy bread"
desc = "A slice of bread that's clearly been left out for far too long."
icon = 'icons/obj/chemical_potionreagents.dmi'
icon_state = "moldy_bread"
base_reagent = /obj/item/weapon/potion_base/aqua_regia
product_potion = /obj/item/weapon/reagent_containers/glass/bottle/potion/panacea
/obj/item/weapon/potion_material/glowing_gem
name = "glowing gem"
desc = "An pretty but rough gem that is literally glowing green, it tingles to touch."
icon = 'icons/obj/chemical_potionreagents.dmi'
icon_state = "glowing_gem"
base_reagent = /obj/item/weapon/potion_base/alkahest
product_potion = /obj/item/weapon/reagent_containers/glass/bottle/potion/magic
/obj/item/weapon/potion_material/giant_toe
name = "giant toe"
desc = "One really large severed toe, in some state of suspended decomposition. It's gross and stinks."
icon = 'icons/obj/chemical_potionreagents.dmi'
icon_state = "giant_toe"
base_reagent = /obj/item/weapon/potion_base/aqua_regia
product_potion = /obj/item/weapon/reagent_containers/glass/bottle/potion/lightness
/obj/item/weapon/potion_material/flesh_of_the_stars
name = "flesh of the stars"
desc = "A rare slab of meat with an unknown origin, said to have fallen from the sky."
icon = 'icons/obj/chemical_potionreagents.dmi'
icon_state = "flesh_of_the_stars"
base_reagent = /obj/item/weapon/potion_base/aqua_regia
product_potion = /obj/item/weapon/reagent_containers/glass/bottle/potion/bonerepair
/obj/item/weapon/potion_material/spinning_poppy
name = "spinning poppy"
desc = "A small poppy flower that seems inclined to twirl without aid."
icon = 'icons/obj/chemical_potionreagents.dmi'
icon_state = "spinning_poppy"
base_reagent = /obj/item/weapon/potion_base/aqua_regia
product_potion = /obj/item/weapon/reagent_containers/glass/bottle/potion/pain
/obj/item/weapon/potion_material/salt_mage
name = "salt mage"
desc = "A statuette made from salt crystals, it's adorned with a little mages hat."
icon = 'icons/obj/chemical_potionreagents.dmi'
icon_state = "salt_mage"
base_reagent = /obj/item/weapon/potion_base/alkahest
product_potion = /obj/item/weapon/reagent_containers/glass/bottle/potion/shrink
/obj/item/weapon/potion_material/golden_grapes
name = "golden grapes"
desc = "A bunch of grapes with a shining golden skin, they smell strongly of some sort of solvent."
icon = 'icons/obj/chemical_potionreagents.dmi'
icon_state = "golden_grapes"
base_reagent = /obj/item/weapon/potion_base/alkahest
product_potion = /obj/item/weapon/reagent_containers/glass/bottle/potion/growth
/obj/item/weapon/potion_material/fairy_house
name = "fairy house"
desc = "A moderately large mushroom with a speckled red cap and... a door on the front?"
icon = 'icons/obj/chemical_potionreagents.dmi'
icon_state = "fairy_house"
base_reagent = /obj/item/weapon/potion_base/ichor
product_potion = /obj/item/weapon/reagent_containers/glass/bottle/potion/faerie
/obj/item/weapon/potion_material/thorny_bulb
name = "thorny bulb"
desc = "A flesh green plant bulb covered in thorns, it has a sulfur rich aroma."
icon = 'icons/obj/chemical_potionreagents.dmi'
icon_state = "thorny_bulb"
base_reagent = /obj/item/weapon/potion_base/aqua_regia
product_potion = /obj/item/weapon/reagent_containers/glass/bottle/potion/relaxation
/obj/item/weapon/potion_material/ancient_egg
name = "ancient egg"
desc = "An egg, but seemingly really really old and long past rotten."
icon = 'icons/obj/chemical_potionreagents.dmi'
icon_state = "ancient_egg"
base_reagent = /obj/item/weapon/potion_base/aqua_regia
product_potion = /obj/item/weapon/reagent_containers/glass/bottle/potion/speed
/obj/item/weapon/potion_material/crown_stem
name = "crown stem"
desc = "An odd little flower that looks like a crown, the leaves have a minty aroma."
icon = 'icons/obj/chemical_potionreagents.dmi'
icon_state = "crown_stem"
base_reagent = /obj/item/weapon/potion_base/alkahest
product_potion = /obj/item/weapon/reagent_containers/glass/bottle/potion/attractiveness
/obj/item/weapon/potion_material/red_ingot
name = "red ingot"
desc = "An oddly red coloured block of iron, it seems rather brittle and wouldn't make for a good smithing material."
icon = 'icons/obj/chemical_potionreagents.dmi'
icon_state = "red_ingot"
base_reagent = /obj/item/weapon/potion_base/alkahest
product_potion = /obj/item/weapon/reagent_containers/glass/bottle/potion/boyjuice
/obj/item/weapon/potion_material/soft_diamond
name = "soft diamond"
desc = "A gem that looks much like a diamond, but is squishy to the touch."
icon = 'icons/obj/chemical_potionreagents.dmi'
icon_state = "soft_diamond"
base_reagent = /obj/item/weapon/potion_base/ichor
product_potion = /obj/item/weapon/reagent_containers/glass/bottle/potion/girljuice
/obj/item/weapon/potion_material/solid_mist
name = "solid mist"
desc = "A small purple stone that seems to be radiating some sort of mist."
icon = 'icons/obj/chemical_potionreagents.dmi'
icon_state = "solid_mist"
base_reagent = /obj/item/weapon/potion_base/ichor
product_potion = /obj/item/weapon/reagent_containers/glass/bottle/potion/badpolymorph
/obj/item/weapon/potion_material/spider_leg
name = "spider leg"
desc = "A severed limb from a spider, it seems to be oozing with green... something."
icon = 'icons/obj/chemical_potionreagents.dmi'
icon_state = "spider_leg"
base_reagent = /obj/item/weapon/potion_base/aqua_regia
product_potion = /obj/item/weapon/reagent_containers/glass/bottle/potion/SOP
/obj/item/weapon/potion_material/folded_dark
name = "folded dark"
desc = "A folded material that appears to be made of pure dark."
icon = 'icons/obj/chemical_potionreagents.dmi'
icon_state = "folded_dark"
base_reagent = /obj/item/weapon/potion_base/ichor
product_potion = /obj/item/weapon/reagent_containers/glass/bottle/potion/truepolymorph
//base ingredients
/obj/item/weapon/potion_base/aqua_regia
name = "aqua regia"
desc = "A mixture of concentrated acids, be careful not to spill it! A base ingredient of many potions."
icon = 'icons/obj/chemical_potionreagents.dmi'
icon_state = "aqua_regia"
w_class = ITEMSIZE_TINY
/obj/item/weapon/potion_base/ichor
name = "ichor"
desc = "A thick and heavy red reagent said to be tinged with the blood of gods. A base ingredient of many potions."
icon = 'icons/obj/chemical_potionreagents.dmi'
icon_state = "ichor"
w_class = ITEMSIZE_TINY
/obj/item/weapon/potion_base/alkahest
name = "alkahest"
desc = "Also known as the universal solvent, said to be capable of dissolving metal rapidly. A base ingredient of many potions."
icon = 'icons/obj/chemical_potionreagents.dmi'
icon_state = "alkahest"
w_class = ITEMSIZE_TINY

View File

@@ -103,6 +103,11 @@
. = ..() . = ..()
reagents.add_reagent("water", 4000) reagents.add_reagent("water", 4000)
/obj/structure/reagent_dispensers/watertank/barrel
name = "water barrel"
desc = "A barrel for holding water."
icon_state = "waterbarrel"
//Fuel //Fuel
/obj/structure/reagent_dispensers/fueltank /obj/structure/reagent_dispensers/fueltank
name = "fuel tank" name = "fuel tank"
@@ -463,6 +468,20 @@
. = ..() . = ..()
reagents.add_reagent("beer",1000) reagents.add_reagent("beer",1000)
/obj/structure/reagent_dispensers/beerkeg/wood
name = "beer keg"
desc = "A beer keg with a tap on it."
icon_state = "beertankfantasy"
/obj/structure/reagent_dispensers/beerkeg/wine
name = "wine barrel"
desc = "A wine casket with a tap on it."
icon_state = "beertankfantasy"
/obj/structure/reagent_dispensers/beerkeg/wine/Initialize()
. = ..()
reagents.add_reagent("redwine",1000)
/obj/structure/reagent_dispensers/beerkeg/fakenuke /obj/structure/reagent_dispensers/beerkeg/fakenuke
name = "nuclear beer keg" name = "nuclear beer keg"
desc = "A beer keg in the form of a nuclear bomb! An absolute blast at parties!" desc = "A beer keg in the form of a nuclear bomb! An absolute blast at parties!"
@@ -492,3 +511,15 @@
reagents.splash_area(get_turf(src), 3) reagents.splash_area(get_turf(src), 3)
visible_message(span("danger", "The [src] bursts open, spreading oil all over the area.")) visible_message(span("danger", "The [src] bursts open, spreading oil all over the area."))
qdel(src) qdel(src)
/obj/structure/reagent_dispensers/bloodbarrel
name = "blood barrel"
desc = "A beer keg."
icon = 'icons/obj/chemical_tanks.dmi'
icon_state = "bloodbarrel"
amount_per_transfer_from_this = 10
/obj/structure/reagent_dispensers/bloodbarrel/Initialize()
. = ..()
reagents.add_reagent("blood", 1000, list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"="O-","resistances"=null,"trace_chem"=null))

View File

@@ -380,3 +380,12 @@
amount_per_transfer_from_this = 20 amount_per_transfer_from_this = 20
possible_transfer_amounts = list(10,20,30,60,120) possible_transfer_amounts = list(10,20,30,60,120)
volume = 120 volume = 120
/obj/item/weapon/reagent_containers/glass/pint_mug
desc = "A rustic pint mug designed for drinking ale."
name = "pint mug"
icon = 'icons/obj/drinks.dmi'
icon_state = "pint_mug"
matter = list(MAT_WOOD = 50)
drop_sound = 'sound/items/drop/wooden.ogg'
pickup_sound = 'sound/items/pickup/wooden.ogg'

View File

@@ -141,3 +141,177 @@
M.adjust_nutrition(-20 * removed) M.adjust_nutrition(-20 * removed)
if(M.weight < 500) if(M.weight < 500)
M.weight += 0.3 M.weight += 0.3
/datum/reagent/polymorph
name = "Transforitine"
id = "polymorph"
description = "A chemical that instantly transforms the consumer into another creature."
taste_description = "luck"
reagent_state = LIQUID
color = "#a754de"
scannable = 1
var/tf_type = /mob/living/simple_mob/animal/passive/mouse
var/tf_possible_types = list(
"mouse" = /mob/living/simple_mob/animal/passive/mouse,
"rat" = /mob/living/simple_mob/animal/passive/mouse/rat,
"giant rat" = /mob/living/simple_mob/vore/aggressive/rat,
"dust jumper" = /mob/living/simple_mob/vore/alienanimals/dustjumper,
"woof" = /mob/living/simple_mob/vore/woof,
"corgi" = /mob/living/simple_mob/animal/passive/dog/corgi,
"cat" = /mob/living/simple_mob/animal/passive/cat,
"chicken" = /mob/living/simple_mob/animal/passive/chicken,
"cow" = /mob/living/simple_mob/animal/passive/cow,
"lizard" = /mob/living/simple_mob/animal/passive/lizard,
"rabbit" = /mob/living/simple_mob/vore/rabbit,
"fox" = /mob/living/simple_mob/animal/passive/fox,
"fennec" = /mob/living/simple_mob/vore/fennec,
"cute fennec" = /mob/living/simple_mob/animal/passive/fennec,
"fennix" = /mob/living/simple_mob/vore/fennix,
"red panda" = /mob/living/simple_mob/vore/redpanda,
"opossum" = /mob/living/simple_mob/animal/passive/opossum,
"horse" = /mob/living/simple_mob/vore/horse,
"goose" = /mob/living/simple_mob/animal/space/goose,
"sheep" = /mob/living/simple_mob/vore/sheep,
"space bumblebee" = /mob/living/simple_mob/vore/bee,
"space bear" = /mob/living/simple_mob/animal/space/bear,
"voracious lizard" = /mob/living/simple_mob/vore/aggressive/dino,
"giant frog" = /mob/living/simple_mob/vore/aggressive/frog,
"jelly blob" = /mob/living/simple_mob/vore/jelly,
"wolf" = /mob/living/simple_mob/vore/wolf,
"direwolf" = /mob/living/simple_mob/vore/wolf/direwolf,
"great wolf" = /mob/living/simple_mob/vore/greatwolf,
"sect queen" = /mob/living/simple_mob/vore/sect_queen,
"sect drone" = /mob/living/simple_mob/vore/sect_drone,
"panther" = /mob/living/simple_mob/vore/aggressive/panther,
"giant snake" = /mob/living/simple_mob/vore/aggressive/giant_snake,
"deathclaw" = /mob/living/simple_mob/vore/aggressive/deathclaw,
"otie" = /mob/living/simple_mob/vore/otie,
"mutated otie" =/mob/living/simple_mob/vore/otie/feral,
"red otie" = /mob/living/simple_mob/vore/otie/red,
"defanged xenomorph" = /mob/living/simple_mob/vore/xeno_defanged,
"catslug" = /mob/living/simple_mob/vore/alienanimals/catslug,
"monkey" = /mob/living/carbon/human/monkey,
"wolpin" = /mob/living/carbon/human/wolpin,
"sparra" = /mob/living/carbon/human/sparram,
"saru" = /mob/living/carbon/human/sergallingm,
"sobaka" = /mob/living/carbon/human/sharkm,
"farwa" = /mob/living/carbon/human/farwa,
"neaera" = /mob/living/carbon/human/neaera,
"stok" = /mob/living/carbon/human/stok,
"weretiger" = /mob/living/simple_mob/vore/weretiger,
"dragon" = /mob/living/simple_mob/vore/bigdragon/friendly,
"leopardmander" = /mob/living/simple_mob/vore/leopardmander
)
/datum/reagent/polymorph/affect_blood(var/mob/living/carbon/target, var/removed)
var/mob/living/M = target
log_debug("polymorph start")
if(!istype(M))
log_debug("polymorph istype")
return
if(M.tf_mob_holder)
log_debug("polymorph tf_holder")
var/mob/living/ourmob = M.tf_mob_holder
if(ourmob.ai_holder)
log_debug("polymorph ai")
var/datum/ai_holder/our_AI = ourmob.ai_holder
our_AI.set_stance(STANCE_IDLE)
M.tf_mob_holder = null
ourmob.ckey = M.ckey
var/turf/get_dat_turf = get_turf(target)
ourmob.loc = get_dat_turf
ourmob.forceMove(get_dat_turf)
ourmob.vore_selected = M.vore_selected
M.vore_selected = null
for(var/obj/belly/B as anything in M.vore_organs)
log_debug("polymorph belly")
B.loc = ourmob
B.forceMove(ourmob)
B.owner = ourmob
M.vore_organs -= B
ourmob.vore_organs += B
ourmob.Life(1)
if(ishuman(M))
log_debug("polymorph human")
for(var/obj/item/W in M)
log_debug("polymorph items")
if(istype(W, /obj/item/weapon/implant/backup) || istype(W, /obj/item/device/nif))
log_debug("polymorph implants")
continue
M.drop_from_inventory(W)
qdel(target)
return
else
log_debug("polymorph else")
if(M.stat == DEAD) //We can let it undo the TF, because the person will be dead, but otherwise things get weird.
log_debug("polymorph dead")
return
log_debug("polymorph not dead")
var/mob/living/new_mob = spawn_mob(M)
new_mob.faction = M.faction
if(new_mob && isliving(new_mob))
log_debug("polymorph new_mob")
for(var/obj/belly/B as anything in new_mob.vore_organs)
log_debug("polymorph new_mob belly")
new_mob.vore_organs -= B
qdel(B)
new_mob.vore_organs = list()
new_mob.name = M.name
new_mob.real_name = M.real_name
for(var/lang in M.languages)
new_mob.languages |= lang
M.copy_vore_prefs_to_mob(new_mob)
new_mob.vore_selected = M.vore_selected
if(ishuman(M))
log_debug("polymorph ishuman part2")
var/mob/living/carbon/human/H = M
if(ishuman(new_mob))
log_debug("polymorph ishuman(newmob)")
var/mob/living/carbon/human/N = new_mob
N.gender = H.gender
N.identifying_gender = H.identifying_gender
else
log_debug("polymorph gender else")
new_mob.gender = H.gender
else
log_debug("polymorph gender else 2")
new_mob.gender = M.gender
if(ishuman(new_mob))
var/mob/living/carbon/human/N = new_mob
N.identifying_gender = M.gender
for(var/obj/belly/B as anything in M.vore_organs)
B.loc = new_mob
B.forceMove(new_mob)
B.owner = new_mob
M.vore_organs -= B
new_mob.vore_organs += B
new_mob.ckey = M.ckey
if(M.ai_holder && new_mob.ai_holder)
var/datum/ai_holder/old_AI = M.ai_holder
old_AI.set_stance(STANCE_SLEEP)
var/datum/ai_holder/new_AI = new_mob.ai_holder
new_AI.hostile = old_AI.hostile
new_AI.retaliate = old_AI.retaliate
M.loc = new_mob
M.forceMove(new_mob)
new_mob.tf_mob_holder = M
target.bloodstr.clear_reagents() //Got to clear all reagents to make sure mobs don't keep spawning.
target.ingested.clear_reagents()
target.touching.clear_reagents()
/datum/reagent/polymorph/proc/spawn_mob(var/mob/living/target)
log_debug("polymorph proc spawn mob")
var/choice = pick(tf_possible_types)
tf_type = tf_possible_types[choice]
log_debug("polymorph [tf_type]")
if(!ispath(tf_type))
log_debug("polymorph tf_type fail")
return
log_debug("polymorph tf_type pass")
var/new_mob = new tf_type(get_turf(target))
return new_mob

View File

@@ -31,4 +31,18 @@
/obj/structure/table/rack/gun_rack/steel/New() /obj/structure/table/rack/gun_rack/steel/New()
material = get_material_by_name(MAT_STEEL) material = get_material_by_name(MAT_STEEL)
..() ..()
/obj/structure/table/rack/wood
color = "#A1662F"
/obj/structure/table/rack/wood/New()
material = get_material_by_name(MAT_WOOD)
..()
/obj/structure/table/rack/shelf/wood
color = "#A1662F"
/obj/structure/table/rack/shelf/wood/New()
material = get_material_by_name(MAT_WOOD)
..()

View File

@@ -218,4 +218,4 @@
/obj/item/device/slow_sizegun/proc/color_box(list/box_segments, new_color, new_time) /obj/item/device/slow_sizegun/proc/color_box(list/box_segments, new_color, new_time)
for(var/i in box_segments) for(var/i in box_segments)
animate(i, color = new_color, time = new_time) animate(i, color = new_color, time = new_time)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 122 KiB

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 353 KiB

After

Width:  |  Height:  |  Size: 411 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 665 KiB

After

Width:  |  Height:  |  Size: 727 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 264 KiB

After

Width:  |  Height:  |  Size: 266 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

After

Width:  |  Height:  |  Size: 7.7 KiB

BIN
icons/obj/closets/chest.dmi Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 685 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 90 KiB

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 98 KiB

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.4 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 KiB

After

Width:  |  Height:  |  Size: 136 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 131 KiB

After

Width:  |  Height:  |  Size: 131 KiB

BIN
icons/obj/props/fantasy.dmi Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

After

Width:  |  Height:  |  Size: 80 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: 21 KiB

After

Width:  |  Height:  |  Size: 25 KiB

View File

@@ -238,7 +238,8 @@
list("Redgate - Hotsprings"), list("Redgate - Hotsprings"),
list("Redgate - Rain City"), list("Redgate - Rain City"),
list("Redgate - Islands Underwater","Redgate - Islands"), list("Redgate - Islands Underwater","Redgate - Islands"),
list("Redgate - Moving Train", "Redgate - Moving Train Upper Level") list("Redgate - Moving Train", "Redgate - Moving Train Upper Level"),
list("Redgate - Fantasy Dungeon", "Redgate - Fantasy Town")
) )
lateload_gb_north = list( lateload_gb_north = list(

View File

@@ -314,7 +314,18 @@
/obj/effect/landmark/map_data/train /obj/effect/landmark/map_data/train
height = 2 height = 2
/datum/map_template/common_lateload/redgate/fantasy
name = "Redgate - Fantasy Town"
desc = "A fantasy town full of low tech stuff."
mappath = 'maps/redgate/fantasy.dmm'
/datum/map_template/common_lateload/redgate/fantasy_dungeon
name = "Redgate - Fantasy Dungeon"
desc = "A fantasy dungeon with lots of monsters and loot."
mappath = 'maps/redgate/fantasy_dungeon.dmm'
/obj/effect/landmark/map_data/fantasy
height = 2
////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////
// Admin-use z-levels for loading whenever an admin feels like // Admin-use z-levels for loading whenever an admin feels like

28108
maps/redgate/fantasy.dmm Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,538 @@
/obj/item/device/healthanalyzer/scroll //reports all of the above, as well as name and quantity of nonmed reagents in stomach
name = "scroll of divination"
desc = "An unusual scroll that appears to report all of the details of a person's health when waved near them. Oddly, it seems to have a little metal chip up near the handles..."
advscan = 3
origin_tech = list(TECH_MAGNET = 7, TECH_BIO = 8)
icon_state = "health_scroll"
/obj/item/weapon/tool/crowbar/alien/magic
name = "sentient crowbar"
desc = "A crowbar with a green gem set in it and a green ribbon tied to it, it floats lightly by itself and appears to be able to pry on its own. It almost feels like there is some sort of anti gravity generator running in it..."
catalogue_data = list(/datum/category_item/catalogue/anomalous/precursor_a/alien_crowbar)
icon_state = "crowbar_sentient"
/obj/item/weapon/tool/screwdriver/alien/magic
name = "vintage screwdriver of revolving"
desc = "A vintage screwdriver that spins as fast as a drill with little aid, it has a red gem on the handle. It oddly sounds like a drill too..."
catalogue_data = list(/datum/category_item/catalogue/anomalous/precursor_a/alien_screwdriver)
icon = 'icons/obj/abductor.dmi'
icon_state = "screwdriver_old"
/obj/item/weapon/weldingtool/alien/magic
name = "bellows of flame"
desc = "A set of bellows that have a yellow gem on the spout, they emit flames when pressed. Oddly seems to have a faint phoron smell to it..."
catalogue_data = list(/datum/category_item/catalogue/anomalous/precursor_a/alien_welder)
icon = 'icons/obj/abductor.dmi'
icon_state = "bellows"
/obj/item/weapon/tool/wirecutters/alien/magic
name = "secateurs of organisation"
desc = "Extremely sharp secateurs, fitted with a glowing blue gem, said to be magically enhanced for speed. There seems to be a little whirring sound coming from beneath that gem..."
icon = 'icons/obj/abductor.dmi'
icon_state = "cutters_magic"
/obj/item/weapon/tool/wrench/alien/magic
name = "pliers of molding"
desc = "A set of pliers that seems to mold to the shape of their target, housing a pink gem. Oddly seems to have a slightly slimey texture at the metal..."
catalogue_data = list(/datum/category_item/catalogue/anomalous/precursor_a/alien_wrench)
icon = 'icons/obj/abductor.dmi'
icon_state = "pliers"
/obj/item/weapon/surgical/bone_clamp/alien/magic
icon = 'icons/obj/abductor.dmi'
toolspeed = 0.75
icon_state = "bone_boneclamp"
name = "bone bone clamp"
desc = "A bone clamp made of bones for fixing bones using bones, it feels strangely adept. In fact, it doesn't really feel like actual bone at all..."
// Bath
/obj/structure/bed/bath
name = "wash tub"
desc = "A wooden tub that can be filled with water for washing yourself."
icon_state = "bath"
base_icon = "bath"
flags = OPENCONTAINER
var/amount_per_transfer_from_this = 5
/obj/structure/bed/bath/update_icon()
if(reagents.total_volume < 1)
icon_state = "bath"
else if(reagents.total_volume < 50)
icon_state = "bath1"
else if(reagents.total_volume < 150)
icon_state = "bath2"
else if(reagents.total_volume < 301)
icon_state = "bath3"
return // Doesn't care about material or anything else.
/obj/structure/bed/bath/attackby(obj/item/I, mob/user)
if(istype(I, /obj/item/weapon/mop) || istype(I, /obj/item/weapon/soap)) //VOREStation Edit - "Allows soap and rags to be used on mopbuckets"
if(reagents.total_volume < 1)
to_chat(user, "<span class='warning'>\The [src] is out of water!</span>")
else
reagents.trans_to_obj(I, 5)
to_chat(user, "<span class='notice'>You wet \the [I] in \the [src].</span>")
playsound(src, 'sound/effects/slosh.ogg', 25, 1)
if(istype(I, /obj/item/weapon/reagent_containers/glass))
update_icon()
return
else if(istype(I, /obj/item/weapon/grab))
var/obj/item/weapon/grab/G = I
var/mob/living/affecting = G.affecting
if(has_buckled_mobs()) //Handles trying to buckle someone else to a chair when someone else is on it
to_chat(user, "<span class='notice'>\The [src] already has someone buckled to it.</span>")
return
user.visible_message("<span class='notice'>[user] attempts to buckle [affecting] into \the [src]!</span>")
if(do_after(user, 20, G.affecting))
affecting.loc = loc
spawn(0)
if(buckle_mob(affecting))
affecting.visible_message(\
"<span class='danger'>[affecting.name] is buckled to [src] by [user.name]!</span>",\
"<span class='danger'>You are buckled to [src] by [user.name]!</span>",\
"<span class='notice'>You hear metal clanking.</span>")
qdel(I)
/obj/structure/bed/bath/New()
create_reagents(300)
..()
//oven
/obj/machinery/appliance/cooker/oven/yeoldoven
name = "oven"
desc = "Old fashioned cookies are ready, dear."
icon_state = "yeoldovenopen"
/obj/machinery/appliance/cooker/oven/yeoldoven/update_icon()
if(!open)
if(!stat)
icon_state = "yeoldovenclosed_on"
if(cooking == TRUE)
icon_state = "yeoldovenclosed_cooking"
if(oven_loop)
oven_loop.start(src)
else
icon_state = "yeoldovenclosed_on"
if(oven_loop)
oven_loop.stop(src)
else
icon_state = "yeoldovenclosed_off"
if(oven_loop)
oven_loop.stop(src)
else
icon_state = "yeoldovenopen"
if(oven_loop)
oven_loop.stop(src)
//toilet
/obj/structure/toilet/wooden
name = "wooden toilet"
desc = "It's basically a hole in a box with a bucket inside. This one seems remarkably clean."
icon_state = "toilet3"
open = 1
/obj/structure/toilet/wooden/attack_hand(mob/living/user as mob)
return //No lid
/obj/structure/toilet/wooden/attackby(obj/item/I as obj, mob/living/user as mob) //simpler interactions
if(istype(I, /obj/item/weapon/grab))
user.setClickCooldown(user.get_attack_speed(I))
var/obj/item/weapon/grab/G = I
if(isliving(G.affecting))
var/mob/living/GM = G.affecting
if(G.state>1)
if(!GM.loc == get_turf(src))
to_chat(user, "<span class='notice'>[GM.name] needs to be on the toilet.</span>")
return
if(open && !swirlie)
user.visible_message("<span class='danger'>[user] starts to give [GM.name] a swirlie!</span>", "<span class='notice'>You start to give [GM.name] a swirlie!</span>")
swirlie = GM
if(do_after(user, 30, GM))
user.visible_message("<span class='danger'>[user] gives [GM.name] a swirlie!</span>", "<span class='notice'>You give [GM.name] a swirlie!</span>", "You hear a toilet flushing.")
if(!GM.internal)
GM.adjustOxyLoss(5)
swirlie = null
else
user.visible_message("<span class='danger'>[user] slams [GM.name] into the [src]!</span>", "<span class='notice'>You slam [GM.name] into the [src]!</span>")
GM.adjustBruteLoss(5)
else
to_chat(user, "<span class='notice'>You need a tighter grip.</span>")
if(cistern && !istype(user,/mob/living/silicon/robot)) //STOP PUTTING YOUR MODULES IN THE TOILET.
if(I.w_class > 3)
to_chat(user, "<span class='notice'>\The [I] does not fit.</span>")
return
if(w_items + I.w_class > 5)
to_chat(user, "<span class='notice'>The cistern is full.</span>")
return
user.drop_item()
I.loc = src
w_items += I.w_class
to_chat(user, "You carefully place \the [I] into the cistern.")
return
/obj/structure/toilet/wooden/New()
open = 1 //just to make sure it works
icon_state = "toilet3"
return
/obj/structure/toilet/wooden/update_icon()
return
//cooking pot
/obj/machinery/microwave/cookingpot
name = "cooking pot"
icon_state = "cookingpot"
desc = "An old fashioned cooking pot above some logs."
/obj/machinery/microwave/cookingpot/start()
src.visible_message("<span class='notice'>The cooking pot starts cooking.</span>", "<span class='notice'>You hear a fire roar.</span>")
src.operating = TRUE
src.icon_state = "cookingpot1"
SStgui.update_uis(src)
/obj/machinery/microwave/cookingpot/abort()
operating = FALSE // Turn it off again aferwards
if(icon_state == "cookingpot1")
icon_state = "cookingpot"
SStgui.update_uis(src)
/obj/machinery/microwave/cookingpot/stop()
operating = FALSE // Turn it off again aferwards
if(icon_state == "cookingpot1")
icon_state = "cookingpot"
SStgui.update_uis(src)
/obj/machinery/microwave/cookingpot/attackby(var/obj/item/O as obj, var/mob/user as mob)
if(src.broken > 0)
if(src.broken == 2 && O.is_screwdriver()) // If it's broken and they're using a screwdriver
user.visible_message( \
"<b>\The [user]</b> starts to fix part of the cooking pot.", \
"<span class='notice'>You start to fix part of the cooking pot.</span>" \
)
playsound(src, O.usesound, 50, 1)
if (do_after(user,20 * O.toolspeed))
user.visible_message( \
"<b>\The [user]</b> fixes part of the cooking pot.", \
"<span class='notice'>You have fixed part of the cooking pot.</span>" \
)
src.broken = 1 // Fix it a bit
else if(src.broken == 1 && O.is_wrench()) // If it's broken and they're doing the wrench
user.visible_message( \
"<b>\The [user]</b> starts to fix part of the cooking pot.", \
"<span class='notice'>You start to fix part of the cooking pot.</span>" \
)
if (do_after(user,20 * O.toolspeed))
user.visible_message( \
"<b>\The [user]</b> fixes the cooking pot.", \
"<span class='notice'>You have fixed the cooking pot.</span>" \
)
src.icon_state = "cookingpot"
src.broken = 0 // Fix it!
src.dirty = 0 // just to be sure
src.flags = OPENCONTAINER | NOREACT
else
to_chat(user, "<span class='warning'>It's broken!</span>")
return 1
else if(src.dirty==100) // The microwave is all dirty so can't be used!
if(istype(O, /obj/item/weapon/reagent_containers/spray/cleaner) || istype(O, /obj/item/weapon/soap)) // If they're trying to clean it then let them
user.visible_message( \
"<b>\The [user]</b> starts to clean the cooking pot.", \
"<span class='notice'>You start to clean the cooking pot.</span>" \
)
if (do_after(user,20))
user.visible_message( \
"<span class='notice'>\The [user] has cleaned the cooking pot.</span>", \
"<span class='notice'>You have cleaned the cooking pot.</span>" \
)
src.dirty = 0 // It's clean!
src.broken = 0 // just to be sure
src.icon_state = "cookingpot"
src.flags = OPENCONTAINER | NOREACT
SStgui.update_uis(src)
else //Otherwise bad luck!!
to_chat(user, "<span class='warning'>It's dirty!</span>")
return 1
else if(is_type_in_list(O,acceptable_items))
var/list/workingList = cookingContents()
if(workingList.len>=(max_n_of_items + circuit_item_capacity)) //Adds component_parts to the maximum number of items. changed 1 to actually just be the circuit item capacity var.
to_chat(user, "<span class='warning'>This [src] is full of ingredients, you cannot put more.</span>")
return 1
if(istype(O, /obj/item/stack) && O:get_amount() > 1) // This is bad, but I can't think of how to change it
var/obj/item/stack/S = O
new O.type (src)
S.use(1)
user.visible_message( \
"<span class='notice'>\The [user] has added one of [O] to \the [src].</span>", \
"<span class='notice'>You add one of [O] to \the [src].</span>")
return
else
// user.remove_from_mob(O) //This just causes problems so far as I can tell. -Pete - Man whoever you are, it's been years. o7
user.drop_from_inventory(O,src)
user.visible_message( \
"<span class='notice'>\The [user] has added \the [O] to \the [src].</span>", \
"<span class='notice'>You add \the [O] to \the [src].</span>")
SStgui.update_uis(src)
return
else if (istype(O,/obj/item/weapon/storage/bag/plants)) // There might be a better way about making plant bags dump their contents into a microwave, but it works.
var/obj/item/weapon/storage/bag/plants/bag = O
var/failed = 1
for(var/obj/item/G in O.contents)
if(!G.reagents || !G.reagents.total_volume)
continue
failed = 0
if(contents.len>=(max_n_of_items + component_parts.len + circuit_item_capacity))
to_chat(user, "<span class='warning'>This [src] is full of ingredients, you cannot put more.</span>")
return 0
else
bag.remove_from_storage(G, src)
contents += G
if(contents.len>=(max_n_of_items + component_parts.len + circuit_item_capacity))
break
if(failed)
to_chat(user, "Nothing in the plant bag is usable.")
return 0
if(!O.contents.len)
to_chat(user, "You empty \the [O] into \the [src].")
else
to_chat(user, "You fill \the [src] from \the [O].")
SStgui.update_uis(src)
return 0
else if(istype(O,/obj/item/weapon/reagent_containers/glass) || \
istype(O,/obj/item/weapon/reagent_containers/food/drinks) || \
istype(O,/obj/item/weapon/reagent_containers/food/condiment) \
)
if (!O.reagents)
return 1
for (var/datum/reagent/R in O.reagents.reagent_list)
if (!(R.id in acceptable_reagents))
to_chat(user, "<span class='warning'>Your [O] contains components unsuitable for cookery.</span>")
return 1
return
else if(istype(O,/obj/item/weapon/grab))
var/obj/item/weapon/grab/G = O
to_chat(user, "<span class='warning'>This is ridiculous. You can not fit \the [G.affecting] in this [src].</span>")
return 1
else if(O.is_screwdriver())
default_deconstruction_screwdriver(user, O)
return
else if(O.is_crowbar())
if(default_deconstruction_crowbar(user, O))
return
else
user.visible_message( \
"<span class='notice'>\The [user] begins [src.anchored ? "unsecuring" : "securing"] the cooking pot.</span>", \
"<span class='notice'>You attempt to [src.anchored ? "unsecure" : "secure"] the cooking pot.</span>"
)
if (do_after(user,20/O.toolspeed))
user.visible_message( \
"<span class='notice'>\The [user] [src.anchored ? "unsecures" : "secures"] the cooking pot.</span>", \
"<span class='notice'>You [src.anchored ? "unsecure" : "secure"] the cooking pot.</span>"
)
src.anchored = !src.anchored
else
to_chat(user, "<span class='notice'>You decide not to do that.</span>")
else if(default_part_replacement(user, O))
return
else if(istype(O, /obj/item/device/paicard))
if(!paicard)
insertpai(user, O)
else
to_chat(user, "<span class='warning'>You have no idea what you can cook with this [O].</span>")
..()
SStgui.update_uis(src)
/obj/machinery/microwave/cookingpot/broke()
src.icon_state = "cookingpotb" // Make it look all busted up and shit
src.visible_message("<span class='warning'>The cooking pot breaks!</span>") //Let them know they're stupid
src.broken = 2 // Make it broken so it can't be used util fixed
src.flags = null //So you can't add condiments
src.operating = 0 // Turn it off again aferwards
SStgui.update_uis(src)
soundloop.stop()
src.ejectpai() // If it broke, time to yeet the PAI.
/obj/machinery/microwave/cookingpot/dispose(var/message = 1)
for (var/atom/movable/A in cookingContents())
A.forceMove(loc)
if (src.reagents.total_volume)
src.dirty++
src.reagents.clear_reagents()
if(message)
to_chat(usr, "<span class='notice'>You dispose of the cooking pot contents.</span>")
SStgui.update_uis(src)
/obj/machinery/microwave/cookingpot/muck_start()
playsound(src, 'sound/effects/splat.ogg', 50, 1) // Play a splat sound
src.icon_state = "cookingpotbloody1" // Make it look dirty!!
/obj/machinery/microwave/cookingpot/muck_finish()
src.visible_message("<span class='warning'>The cooking pot gets covered in muck!</span>")
src.dirty = 100 // Make it dirty so it can't be used util cleaned
src.flags = null //So you can't add condiments
src.icon_state = "cookingpotbloody0" // Make it look dirty too
src.operating = 0 // Turn it off again aferwards
SStgui.update_uis(src)
soundloop.stop()
// Magic bluespace stuff
/obj/item/clothing/gloves/bluespace/magic
name = "bracer of resilience"
desc = "A bracer that is said to make one resistent to size changing magic."
icon = 'icons/inventory/accessory/item_vr.dmi'
icon_state = "bs_magic"
//harpoon
/obj/item/weapon/bluespace_harpoon/wand
name = "teleportation wand"
desc = "An odd wand that weighs more than it looks like it should. It has a wire protruding from it and a glass-like tip, suggesting there may be more tech behind this than magic."
icon = 'icons/obj/gun_vr.dmi'
icon_state = "harpoonwand-2"
/obj/item/weapon/bluespace_harpoon/wand/update_icon()
if(transforming)
switch(mode)
if(0)
flick("harpoonwand-2-change", src)
icon_state = "harpoonwand-1"
if(1)
flick("harpoonwand-1-change",src)
icon_state = "harpoonwand-2"
transforming = 0
/*
* magic orb
*/
/obj/item/weapon/gun/energy/taser/magic
name = "orb of lightning"
desc = "An orb filled with electrical energy, it looks oddly like a toy plasma orb..."
description_fluff = ""
icon_state = "orb"
//Kettle
/obj/machinery/chemical_dispenser/kettle //reskin of coffee dispenser
name = "kettle"
desc = "A kettle used for making hot drinks."
icon_state = "kettle"
ui_title = "kettle"
accept_drinking = 1
/obj/machinery/chemical_dispenser/kettle/full
spawn_cartridges = list(
/obj/item/weapon/reagent_containers/chem_disp_cartridge/coffee,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/cafe_latte,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/soy_latte,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/hot_coco,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/milk,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/cream,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/sugar,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/tea,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/ice,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/mint,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/orange,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/lemon,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/lime,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/berry,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/greentea,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/decaf,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/chaitea,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/decafchai
)
// teleporter
/obj/item/device/perfect_tele/magic
name = "teleportation tome"
desc = "A large tome that can be used to teleport to special pages that can be removed from it. The spine seems to have some sort buzzing tech inside..."
icon = 'icons/obj/props/fantasy.dmi'
icon_state = "teleporter"
beacons_left = 3
cell_type = /obj/item/weapon/cell/device
origin_tech = list(TECH_MAGNET = 5, TECH_BLUESPACE = 5)
/obj/item/device/perfect_tele_beacon/magic
name = "teleportation page"
desc = "A single page from a tome, with a glowing blue symbol on it. It seems like the symbol is raised as though there were something running beneath it..."
icon = 'icons/obj/props/fantasy.dmi'
icon_state = "page"
/obj/item/device/perfect_tele/magic/attack_self(mob/user, var/radial_menu_anchor = src)
if(loc_network)
for(var/obj/item/device/perfect_tele_beacon/stationary/nb in GLOB.premade_tele_beacons) //ChompEDIT - GLOB
if(nb.tele_network == loc_network)
beacons[nb.tele_name] = nb
loc_network = null //Consumed
if(!(user.ckey in warned_users))
warned_users |= user.ckey
tgui_alert_async(user,{"
This device can be easily used to break ERP preferences due to the nature of teleporting and tele-vore.
Make sure you carefully examine someone's OOC prefs before teleporting them if you are going to use this device for ERP purposes.
This device records all warnings given and teleport events for admin review in case of pref-breaking, so just don't do it.
"},"OOC Warning")
var/choice = show_radial_menu(user, radial_menu_anchor, radial_images, custom_check = CALLBACK(src, PROC_REF(check_menu), user), require_near = TRUE, tooltips = TRUE)
if(!choice)
return
else if(choice == "New Beacon")
if(beacons_left <= 0)
to_chat(user, "<span class='warning'>The tome can't support any more pages!</span>")
return
var/new_name = html_encode(tgui_input_text(user,"New pages's name (2-20 char):","[src]",null,20))
if(!check_menu(user))
return
if(length(new_name) > 20 || length(new_name) < 2)
to_chat(user, "<span class='warning'>Entered name length invalid (must be longer than 2, no more than than 20).</span>")
return
if(new_name in beacons)
to_chat(user, "<span class='warning'>No duplicate names, please. '[new_name]' exists already.</span>")
return
var/obj/item/device/perfect_tele_beacon/magic/nb = new(get_turf(src))
nb.tele_name = new_name
nb.tele_hand = src
nb.creator = user.ckey
beacons[new_name] = nb
beacons_left--
if(isliving(user))
var/mob/living/L = user
L.put_in_any_hand_if_possible(nb)
rebuild_radial_images()
else
destination = beacons[choice]
rebuild_radial_images()
//sizegun
/obj/item/device/slow_sizegun/magic
name = "wand of growth and shrinking"
desc = "A wand said to be able to shrink or grow it's targets, it's encrusted with glowing gems and a... trigger?"
icon = 'icons/obj/gun_vr.dmi'
icon_state = "sizegun-magic-0"
base_icon_state = "sizegun-magic"

View File

@@ -168,7 +168,8 @@
list("Redgate - Hotsprings"), list("Redgate - Hotsprings"),
list("Redgate - Rain City"), list("Redgate - Rain City"),
list("Redgate - Islands Underwater","Redgate - Islands"), list("Redgate - Islands Underwater","Redgate - Islands"),
list("Redgate - Moving Train", "Redgate - Moving Train Upper Level") list("Redgate - Moving Train", "Redgate - Moving Train Upper Level"),
list("Redgate - Fantasy Dungeon", "Redgate - Fantasy Town")
) )
ai_shell_restricted = TRUE ai_shell_restricted = TRUE

View File

@@ -195,7 +195,8 @@
list("Redgate - Hotsprings"), list("Redgate - Hotsprings"),
list("Redgate - Rain City"), list("Redgate - Rain City"),
list("Redgate - Islands Underwater","Redgate - Islands"), list("Redgate - Islands Underwater","Redgate - Islands"),
list("Redgate - Moving Train", "Redgate - Moving Train Upper Level") list("Redgate - Moving Train", "Redgate - Moving Train Upper Level"),
list("Redgate - Fantasy Dungeon", "Redgate - Fantasy Town")
) )
ai_shell_restricted = TRUE ai_shell_restricted = TRUE

View File

@@ -1700,6 +1700,7 @@
#include "code\game\objects\structures\props\blackbox.dm" #include "code\game\objects\structures\props\blackbox.dm"
#include "code\game\objects\structures\props\esoteric.dm" #include "code\game\objects\structures\props\esoteric.dm"
#include "code\game\objects\structures\props\fake_ai.dm" #include "code\game\objects\structures\props\fake_ai.dm"
#include "code\game\objects\structures\props\fantasy.dm"
#include "code\game\objects\structures\props\fences.dm" #include "code\game\objects\structures\props\fences.dm"
#include "code\game\objects\structures\props\machines.dm" #include "code\game\objects\structures\props\machines.dm"
#include "code\game\objects\structures\props\nest.dm" #include "code\game\objects\structures\props\nest.dm"
@@ -2508,6 +2509,7 @@
#include "code\modules\food\food\snacks\meat.dm" #include "code\modules\food\food\snacks\meat.dm"
#include "code\modules\food\glass\bottle.dm" #include "code\modules\food\glass\bottle.dm"
#include "code\modules\food\glass\bottle_ch.dm" #include "code\modules\food\glass\bottle_ch.dm"
#include "code\modules\food\glass\bottle_potion.dm"
#include "code\modules\food\glass\bottle_vr.dm" #include "code\modules\food\glass\bottle_vr.dm"
#include "code\modules\food\glass\bottle\robot.dm" #include "code\modules\food\glass\bottle\robot.dm"
#include "code\modules\food\kitchen\gibber.dm" #include "code\modules\food\kitchen\gibber.dm"
@@ -3419,6 +3421,7 @@
#include "code\modules\mob\living\simple_mob\subtypes\slime\xenobio\subtypes.dm" #include "code\modules\mob\living\simple_mob\subtypes\slime\xenobio\subtypes.dm"
#include "code\modules\mob\living\simple_mob\subtypes\slime\xenobio\xenobio.dm" #include "code\modules\mob\living\simple_mob\subtypes\slime\xenobio\xenobio.dm"
#include "code\modules\mob\living\simple_mob\subtypes\slime\xenobio\xenobio_vr.dm" #include "code\modules\mob\living\simple_mob\subtypes\slime\xenobio\xenobio_vr.dm"
#include "code\modules\mob\living\simple_mob\subtypes\vore\bat.dm"
#include "code\modules\mob\living\simple_mob\subtypes\vore\bee.dm" #include "code\modules\mob\living\simple_mob\subtypes\vore\bee.dm"
#include "code\modules\mob\living\simple_mob\subtypes\vore\bigdragon.dm" #include "code\modules\mob\living\simple_mob\subtypes\vore\bigdragon.dm"
#include "code\modules\mob\living\simple_mob\subtypes\vore\c_pet.dm" #include "code\modules\mob\living\simple_mob\subtypes\vore\c_pet.dm"
@@ -3426,6 +3429,7 @@
#include "code\modules\mob\living\simple_mob\subtypes\vore\chungus.dm" #include "code\modules\mob\living\simple_mob\subtypes\vore\chungus.dm"
#include "code\modules\mob\living\simple_mob\subtypes\vore\cookiegirl.dm" #include "code\modules\mob\living\simple_mob\subtypes\vore\cookiegirl.dm"
#include "code\modules\mob\living\simple_mob\subtypes\vore\corrupt_hounds.dm" #include "code\modules\mob\living\simple_mob\subtypes\vore\corrupt_hounds.dm"
#include "code\modules\mob\living\simple_mob\subtypes\vore\cryptdrake.dm"
#include "code\modules\mob\living\simple_mob\subtypes\vore\deathclaw.dm" #include "code\modules\mob\living\simple_mob\subtypes\vore\deathclaw.dm"
#include "code\modules\mob\living\simple_mob\subtypes\vore\dino.dm" #include "code\modules\mob\living\simple_mob\subtypes\vore\dino.dm"
#include "code\modules\mob\living\simple_mob\subtypes\vore\dominated_brain.dm" #include "code\modules\mob\living\simple_mob\subtypes\vore\dominated_brain.dm"
@@ -3447,6 +3451,7 @@
#include "code\modules\mob\living\simple_mob\subtypes\vore\otie.dm" #include "code\modules\mob\living\simple_mob\subtypes\vore\otie.dm"
#include "code\modules\mob\living\simple_mob\subtypes\vore\pakkun.dm" #include "code\modules\mob\living\simple_mob\subtypes\vore\pakkun.dm"
#include "code\modules\mob\living\simple_mob\subtypes\vore\panther.dm" #include "code\modules\mob\living\simple_mob\subtypes\vore\panther.dm"
#include "code\modules\mob\living\simple_mob\subtypes\vore\peasant.dm"
#include "code\modules\mob\living\simple_mob\subtypes\vore\rabbit.dm" #include "code\modules\mob\living\simple_mob\subtypes\vore\rabbit.dm"
#include "code\modules\mob\living\simple_mob\subtypes\vore\rat.dm" #include "code\modules\mob\living\simple_mob\subtypes\vore\rat.dm"
#include "code\modules\mob\living\simple_mob\subtypes\vore\rat_ch.dm" #include "code\modules\mob\living\simple_mob\subtypes\vore\rat_ch.dm"
@@ -3461,6 +3466,8 @@
#include "code\modules\mob\living\simple_mob\subtypes\vore\solargrub.dm" #include "code\modules\mob\living\simple_mob\subtypes\vore\solargrub.dm"
#include "code\modules\mob\living\simple_mob\subtypes\vore\solargrub_larva.dm" #include "code\modules\mob\living\simple_mob\subtypes\vore\solargrub_larva.dm"
#include "code\modules\mob\living\simple_mob\subtypes\vore\solarmoth_ch.dm" #include "code\modules\mob\living\simple_mob\subtypes\vore\solarmoth_ch.dm"
#include "code\modules\mob\living\simple_mob\subtypes\vore\succubi.dm"
#include "code\modules\mob\living\simple_mob\subtypes\vore\vampire.dm"
#include "code\modules\mob\living\simple_mob\subtypes\vore\vore.dm" #include "code\modules\mob\living\simple_mob\subtypes\vore\vore.dm"
#include "code\modules\mob\living\simple_mob\subtypes\vore\vore_hostile.dm" #include "code\modules\mob\living\simple_mob\subtypes\vore\vore_hostile.dm"
#include "code\modules\mob\living\simple_mob\subtypes\vore\weretiger.dm" #include "code\modules\mob\living\simple_mob\subtypes\vore\weretiger.dm"
@@ -4009,6 +4016,7 @@
#include "code\modules\reagents\hoses\connector.dm" #include "code\modules\reagents\hoses\connector.dm"
#include "code\modules\reagents\hoses\hose.dm" #include "code\modules\reagents\hoses\hose.dm"
#include "code\modules\reagents\hoses\hose_connector.dm" #include "code\modules\reagents\hoses\hose_connector.dm"
#include "code\modules\reagents\machinery\alembic.dm"
#include "code\modules\reagents\machinery\chem_master.dm" #include "code\modules\reagents\machinery\chem_master.dm"
#include "code\modules\reagents\machinery\chemalyzer.dm" #include "code\modules\reagents\machinery\chemalyzer.dm"
#include "code\modules\reagents\machinery\distillery.dm" #include "code\modules\reagents\machinery\distillery.dm"
@@ -4546,6 +4554,7 @@
#include "maps\atoll\atoll_objs.dm" #include "maps\atoll\atoll_objs.dm"
#include "maps\atoll\atoll_turfs.dm" #include "maps\atoll\atoll_turfs.dm"
#include "maps\gateway_archive_vr\blackmarketpackers.dm" #include "maps\gateway_archive_vr\blackmarketpackers.dm"
#include "maps\redgate\fantasy_items.dm"
#include "maps\southern_cross\southern_cross.dm" #include "maps\southern_cross\southern_cross.dm"
#include "maps\southern_cross\items\encryptionkey_sc.dm" #include "maps\southern_cross\items\encryptionkey_sc.dm"
#include "maps\southern_cross\items\headset_sc.dm" #include "maps\southern_cross\items\headset_sc.dm"