mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-04-03 10:31:10 +01:00
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.
214 lines
5.5 KiB
Plaintext
214 lines
5.5 KiB
Plaintext
//Chain link fences
|
|
//Sprites ported from /VG/
|
|
|
|
#define CUT_TIME 10 SECONDS
|
|
#define CLIMB_TIME 5 SECONDS
|
|
|
|
#define NO_HOLE 0 //section is intact
|
|
#define MEDIUM_HOLE 1 //medium hole in the section - can climb through
|
|
#define LARGE_HOLE 2 //large hole in the section - can walk through
|
|
#define MAX_HOLE_SIZE LARGE_HOLE
|
|
|
|
/obj/structure/fence
|
|
name = "fence"
|
|
desc = "A chain link 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 = "straight"
|
|
|
|
var/cuttable = TRUE
|
|
var/hole_size= NO_HOLE
|
|
var/invulnerable = FALSE
|
|
|
|
/obj/structure/fence/Initialize()
|
|
update_cut_status()
|
|
return ..()
|
|
|
|
/obj/structure/fence/examine(mob/user)
|
|
. = ..()
|
|
|
|
switch(hole_size)
|
|
if(MEDIUM_HOLE)
|
|
. += "There is a large hole in it."
|
|
if(LARGE_HOLE)
|
|
. += "It has been completely cut through."
|
|
|
|
/obj/structure/fence/get_description_interaction()
|
|
var/list/results = list()
|
|
if(cuttable && !invulnerable && hole_size < MAX_HOLE_SIZE)
|
|
results += "[desc_panel_image("wirecutters")]to [hole_size > NO_HOLE ? "expand the":"cut a"] hole into the fence, allowing passage."
|
|
return results
|
|
|
|
/obj/structure/fence/end
|
|
icon_state = "end"
|
|
cuttable = FALSE
|
|
|
|
/obj/structure/fence/corner
|
|
icon_state = "corner"
|
|
cuttable = FALSE
|
|
|
|
/obj/structure/fence/post
|
|
icon_state = "post"
|
|
cuttable = FALSE
|
|
|
|
/obj/structure/fence/cut/medium
|
|
icon_state = "straight_cut2"
|
|
hole_size = MEDIUM_HOLE
|
|
|
|
/obj/structure/fence/cut/large
|
|
icon_state = "straight_cut3"
|
|
hole_size = LARGE_HOLE
|
|
|
|
// Projectiles can pass through fences.
|
|
/obj/structure/fence/CanPass(atom/movable/mover, turf/target)
|
|
if(istype(mover, /obj/item/projectile))
|
|
return TRUE
|
|
return ..()
|
|
|
|
/obj/structure/fence/attackby(obj/item/W, mob/user)
|
|
if(W.is_wirecutter())
|
|
if(!cuttable)
|
|
to_chat(user, span("warning", "This section of the fence can't be cut."))
|
|
return
|
|
if(invulnerable)
|
|
to_chat(user, span("warning", "This fence is too strong to cut through."))
|
|
return
|
|
var/current_stage = hole_size
|
|
if(current_stage >= MAX_HOLE_SIZE)
|
|
to_chat(user, span("notice", "This fence has too much cut out of it already."))
|
|
return
|
|
|
|
user.visible_message(span("danger", "\The [user] starts cutting through \the [src] with \the [W]."),\
|
|
span("danger", "You start cutting through \the [src] with \the [W]."))
|
|
playsound(src, W.usesound, 50, 1)
|
|
|
|
if(do_after(user, CUT_TIME * W.toolspeed, target = src))
|
|
if(current_stage == hole_size)
|
|
switch(++hole_size)
|
|
if(MEDIUM_HOLE)
|
|
visible_message(span("notice", "\The [user] cuts into \the [src] some more."))
|
|
to_chat(user, span("notice", "You could probably fit yourself through that hole now. Although climbing through would be much faster if you made it even bigger."))
|
|
climbable = TRUE
|
|
if(LARGE_HOLE)
|
|
visible_message(span("notice", "\The [user] completely cuts through \the [src]."))
|
|
to_chat(user, span("notice", "The hole in \the [src] is now big enough to walk through."))
|
|
climbable = FALSE
|
|
update_cut_status()
|
|
return TRUE
|
|
|
|
/obj/structure/fence/proc/update_cut_status()
|
|
if(!cuttable)
|
|
return
|
|
density = TRUE
|
|
|
|
switch(hole_size)
|
|
if(NO_HOLE)
|
|
icon_state = initial(icon_state)
|
|
if(MEDIUM_HOLE)
|
|
icon_state = "straight_cut2"
|
|
if(LARGE_HOLE)
|
|
icon_state = "straight_cut3"
|
|
density = FALSE
|
|
|
|
//FENCE DOORS
|
|
|
|
/obj/structure/fence/door
|
|
name = "fence door"
|
|
desc = "Not very useful without a real lock."
|
|
icon_state = "door_closed"
|
|
cuttable = FALSE
|
|
var/open = FALSE
|
|
var/locked = FALSE
|
|
|
|
/obj/structure/fence/door/Initialize()
|
|
update_door_status()
|
|
return ..()
|
|
|
|
/obj/structure/fence/door/opened
|
|
icon_state = "door_opened"
|
|
open = TRUE
|
|
density = TRUE
|
|
|
|
/obj/structure/fence/door/locked
|
|
desc = "It looks like it has a strong padlock attached."
|
|
locked = TRUE
|
|
|
|
/obj/structure/fence/door/attack_hand(mob/user)
|
|
if(can_open(user))
|
|
toggle(user)
|
|
else
|
|
to_chat(user, span("warning", "\The [src] is [!open ? "locked" : "stuck open"]."))
|
|
|
|
return TRUE
|
|
|
|
/obj/structure/fence/door/proc/toggle(mob/user)
|
|
switch(open)
|
|
if(FALSE)
|
|
visible_message(span("notice", "\The [user] opens \the [src]."))
|
|
open = TRUE
|
|
if(TRUE)
|
|
visible_message(span("notice", "\The [user] closes \the [src]."))
|
|
open = FALSE
|
|
|
|
update_door_status()
|
|
playsound(src, 'sound/machines/click.ogg', 100, 1)
|
|
|
|
/obj/structure/fence/door/proc/update_door_status()
|
|
switch(open)
|
|
if(FALSE)
|
|
density = TRUE
|
|
icon_state = "door_closed"
|
|
if(TRUE)
|
|
density = FALSE
|
|
icon_state = "door_opened"
|
|
|
|
/obj/structure/fence/door/proc/can_open(mob/user)
|
|
if(locked)
|
|
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
|
|
|
|
#undef NO_HOLE
|
|
#undef MEDIUM_HOLE
|
|
#undef LARGE_HOLE
|
|
#undef MAX_HOLE_SIZE |