Fantasy redgate map

Added a new fantasy redgate map that consists of a fantasy town and a large dungeon beneath it.

Added a selection of fantasy props.

Added a variety of "magic" resprites of existing items. These are intended to be tech disguised as magic and have descriptions to hint at it, along with some papers on the map.

Added an alchemy system that creates potions in an alembic out of an ingredient and a base. If the ingredient and base match, an interesting potion is created, if they don't, a poor quality potion is created.

Added a new reagent that polymorphs the drinker into a random creature.

Added a chest version of crates.

Added wooden wall lockers.

Added random spawners for fantasy items, potions, ingredients and bases for mapping.

Added hedge and wooden fences.

Added an old fashioned resprite of the oven.

Added a cooking pot resprite of the microwave.

Added wall torches.

Added barrel version of water tanks, beer tanks, wine tanks, blood tanks and a kettle resprite of a coffee dispenser.

Added a wooden tub bath.

Added 19 new vore mobs: 2 Catslugs, 6 succubi, 1 cryptdrake, 4 vampires 5 peasants and a bat.
This commit is contained in:
SatinIsle
2023-09-22 21:44:22 +01:00
parent 202870bfd7
commit 0c39b8b7d8
70 changed files with 53276 additions and 68 deletions
@@ -1441,6 +1441,10 @@
decals = null
color = COLOR_OFF_WHITE
/decl/closet_appearance/wall_double/wooden
decals = null
color = WOOD_COLOR_RICH
/decl/closet_appearance/wall_double/medical
decals = null
color = COLOR_OFF_WHITE
@@ -80,6 +80,27 @@
/obj/structure/closet/walllocker/medical/east
pixel_x = 32
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
//double-size "cabinet" lockers, from Killian
@@ -724,6 +724,15 @@
open_sound = 'sound/effects/wooden_closet_open.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
/obj/structure/closet/crate/miningcar
name = "mining cart"
+35
View File
@@ -170,6 +170,41 @@
return FALSE
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 CLIMB_TIME
@@ -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
@@ -384,4 +384,58 @@
if(!anchored)
to_chat(user,"<span class='notice'> The bed isn't secured.</span>")
return
return
// 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)
..()
@@ -124,6 +124,61 @@
else
to_chat(user, "<span class='notice'>You need a tighter grip.</span>")
/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
/obj/structure/urinal
name = "urinal"