[WORK IN PROGRESS] Konyang and Point Verdant (#16714)

* starting point verdant

* major progress

* PAIN

* test

* zlevels AAGHHH OH NO

* im scream

* kawnyang

* dam thats good

* Biff Largehuge

* Look Gordon, ropes!

* wawagh

* rgrhgrhrgrh

* Gordon, you're alive! Thank God for that hazard suit.

* help

* frownie face

* wegh

* Gordon! Get away from the beams!

* Good morning, Gordon.

* Signs

* fix multiple proc definition

* initial ambience

* gay rain

* beach and some pebbles literally

* fixing conflicts aUGH

* generation

* guh?

* sewers and beach additions

* maping

* map

* womp womp

* landing zone

* fixing missing shit

* buddha

* ass

* major map updates

* implemented key doors, fixed baloon alert and tasks

* mineral color, adds ozone layer

* real fake walls

* vending subtypes for the regional market

* mooooar

* minimart pt 1

* haneunim skybox

* station mapping progress

* minimart and roboclinic

* offices progress

* bar work

* size change, some polishing of the office + police station

* map size update. Also a fuckton

* tunnels

* more work

* Why doesnt the map initialize

* broke shit

* fixing point verdant spawning, also ocean landing zone

* finishing some buildings

* mapping, village, not finished

* village, main road

* village stuff

* village stuff

* village stuff

* village stuff

* anchoring

* village stuff

* random space tiles fix

* random space tiles fix

* bin fixes

* missing initialize hint on new floors

* fix open space on basement level

* idk

* missing initialize hint

* tests again please

* tests rerun please

* oven/small be gone

* remove shuttle landmarks idk

* bad stairs fix maybe

* fix missing open space above stairs

* tests rerun please

* CircularRandomTurfAround fix

* spaces to tabs

---------

Co-authored-by: atteria <tarkona@protonmail.com>
Co-authored-by: Fluffy <65877598+FluffyGhoster@users.noreply.github.com>
Co-authored-by: DreamySkrell <107256943+DreamySkrell@users.noreply.github.com>
This commit is contained in:
kyres1
2023-09-23 21:23:38 +02:00
committed by GitHub
co-authored by atteria Fluffy DreamySkrell
parent ec2cbcef4c
commit f18d4128ad
102 changed files with 237154 additions and 10 deletions
+74
View File
@@ -0,0 +1,74 @@
/obj/effect/decal/curb
icon = 'icons/obj/structure/urban/road_edges.dmi'
icon_state = "curb"
layer = 2
mouse_opacity = 0
/obj/effect/decal/curb/corner
icon_state = "curb_corner"
/obj/effect/decal/road_marking
icon = 'icons/obj/decals/street/road_markings.dmi'
icon_state = "line"
layer = 2
mouse_opacity = 0
/obj/effect/decal/road_marking/thin
icon_state = "line_thin"
/obj/effect/decal/road_marking/center
icon_state = "center-line"
/obj/effect/decal/road_marking/no_pass
icon_state = "no_pass"
/obj/effect/decal/road_marking/no_park
icon_state = "no_park"
/obj/effect/decal/road_marking/crosswalk
icon_state = "pedestrian"
/obj/effect/decal/road_marking/turn_right
icon_state = "turn_right"
/obj/effect/decal/road_marking/turn_left
icon_state = "turn_left"
/obj/effect/decal/road_marking/fork
icon_state = "fork"
/obj/effect/decal/road_marking/reflector
icon_state = "reflector"
/obj/effect/decal/road_marking/incline
icon_state = "incline_line"
layer = 2.03
/obj/effect/decal/road_marking/incline/center
icon_state = "incline_center-line"
/obj/effect/decal/exterior_stairs
icon = 'icons/obj/structure/urban/ledges.dmi'
icon_state = "stairs-single"
layer = 2
/obj/effect/decal/exterior_stairs/center
icon_state = "stairs-center"
/obj/effect/decal/exterior_stairs/left
icon_state = "stairs-left"
/obj/effect/decal/exterior_stairs/right
icon_state = "stairs-right"
/obj/effect/decal/exterior_stairs/half
icon_state = "half-stairs-single"
/obj/effect/decal/exterior_stairs/half/center
icon_state = "half-stairs-center"
/obj/effect/decal/exterior_stairs/half/left
icon_state = "half-stairs-left"
/obj/effect/decal/exterior_stairs/half/right
icon_state = "half-stairs-right"
+16
View File
@@ -0,0 +1,16 @@
/obj/effect/decal/plaster
icon = 'icons/turf/wood_wall_testing.dmi'
icon_state = "plaster_end"
layer = 2
/obj/effect/decal/plaster/yellow
color = "#e6b927"
/obj/effect/decal/plaster/green
color = "#93e627"
/obj/effect/decal/plaster/red
color = "#e62727"
/obj/effect/decal/plaster/blue
color = "#2b5eaa"
@@ -561,6 +561,17 @@
starts_with = list(/obj/item/reagent_containers/food/snacks/donkpocket/sinpocket = 6)
desc_antag = "Crush bottom of package to initiate chemical heating. Wait for 20 seconds before consumption. Product will cool if not eaten within seven minutes."
/obj/item/storage/box/donkpockets/gwok
name = "box of teriyaki Gwok-pockets"
icon_state = "gwokpocketbox"
item_state = "redbox"
illustration = null
starts_with = list(/obj/item/reagent_containers/food/snacks/donkpocket/teriyaki = 6)
/obj/item/storage/box/donkpockets/gwok/takoyaki
name = "box of takoyaki Gwok-pockets"
starts_with = list(/obj/item/reagent_containers/food/snacks/donkpocket/takoyaki = 6)
/obj/item/storage/box/janitorgloves
name = "janitorial gloves box"
desc = "A box full of janitorial gloves of all shapes and sizes."
+47
View File
@@ -0,0 +1,47 @@
/obj/structure/beach_umbrella
name = "overhead beach umbrella"
desc = "A tightly secured beach umbrella which looks pretty elegant against the sun."
icon = 'icons/obj/structure/urban/misc_64x64.dmi'
icon_state = "umbrella"
anchored = TRUE
layer = 9
/obj/structure/beach_umbrella/alt
icon_state = "umbrella_alt"
/obj/structure/dock_structure
name = "docking tie"
desc = "A large, very secure tie-off point for a dock."
icon = 'icons/obj/structure/industrial/docks.dmi'
icon_state = "dock_tie"
anchored = TRUE
/obj/structure/dock_structure/rail
name = "docking rail line"
desc = "A large railing mechanism to lift vessels out of the water with ease."
icon_state = "rail"
/obj/structure/dock_structure/rail/start
icon_state = "rail_start"
/obj/structure/dock_structure/rail/end
icon_state = "rail_end"
/obj/structure/boat
name = "surface water craft"
desc = "A large boat floating steadily atop the water."
icon = 'icons/obj/structure/industrial/watercraft.dmi'
icon_state = "radio_ship"
anchored = TRUE
density = TRUE
layer = 9
/obj/structure/crane
name = "overhead guiding crane"
desc = "A towering crane for lifting industrial sized cargo."
icon = 'icons/obj/structure/industrial/cranes.dmi'
icon_state = "crane"
anchored = TRUE
density = TRUE
layer = 9
pixel_x = -16
@@ -140,6 +140,9 @@
if(istype(W))
W.hitby(AM)
/obj/structure/window_frame/wood
color = "#8f5847"
/obj/structure/window_frame/unanchored // Used during in-game construction.
should_check_mapload = FALSE // No glass.
anchored = FALSE
+35
View File
@@ -185,3 +185,38 @@
/obj/structure/lattice/catwalk/indoor/grate/dark
color = COLOR_DARK_GUNMETAL
/obj/structure/lattice/catwalk/indoor/urban
name = "grate"
desc = "A metal grate."
icon = 'icons/obj/structure/over_turf.dmi'
icon_state = "city_grate"
return_amount = 1
smooth = null
/obj/structure/lattice/catwalk/indoor/tatami
name = "tatami spread"
desc = "A straw mat rug of some sort, frequently referred to as a tatami."
icon = 'icons/obj/structure/over_turf.dmi'
icon_state = "tatami"
return_amount = null
smooth = null
footstep_sound = /singleton/sound_category/carpet_footstep
/obj/structure/lattice/catwalk/indoor/planks
name = "flooring plank"
desc = "A ricket assortment of planks meant to be stood upon."
icon = 'icons/obj/structure/urban/wood.dmi'
icon_state = "plank"
return_amount = null
smooth = null
footstep_sound = /singleton/sound_category/wood_footstep
/obj/structure/lattice/catwalk/indoor/planks/opaque
icon_state = "plank_dark"
/obj/structure/lattice/catwalk/indoor/planks/stairs
icon_state = "plank_stairs"
/obj/structure/lattice/catwalk/indoor/planks/deep
icon_state = "plank_deep"
+134 -2
View File
@@ -1,7 +1,6 @@
/obj/structure/light_pole
name = "light pole"
desc = "A tall light source."
light_color = COLOR_ORANGE
icon = 'icons/effects/32x96.dmi'
icon_state = "rustlamp_l"
anchored = TRUE
@@ -12,4 +11,137 @@
light_power = 8
/obj/structure/light_pole/r
icon_state = "rustlamp_r"
icon_state = "rustlamp_r"
/obj/structure/light_pole/konyang
name = "dangling lamp"
desc = "A flame-lit lamp dangling precariously from a tall pole."
icon = 'icons/obj/structure/urban/poles.dmi'
icon_state = "right_lamp"
layer = 9.1
anchored = TRUE
density = FALSE
light_color = "#FA644B"
light_wedge = LIGHT_OMNI
light_range = 6
light_power = 1
/obj/structure/light_pole/konyang/left
icon_state = "left_lamp"
/obj/structure/utility_pole
name = "tall pole"
desc = "A very tall utility pole for urban infrastructure."
icon = 'icons/obj/structure/urban/poles.dmi'
icon_state = "junction"
layer = 9
anchored = TRUE
/obj/structure/utility_pole/gwok
name = "Go Go Gwok street sign"
desc = "A very tall street sign which alerts you of a Go Go Gwok eating establishment, where you can eat establishments."
icon = 'icons/obj/structure/urban/konyang64x96.dmi'
icon_state = "nice_gwok"
/obj/structure/utility_pole/street
desc = "A tall light source. This one seems to be off."
icon = 'icons/obj/structure/urban/poles.dmi'
icon_state = "street"
/obj/effect/overlay/street_light
icon = 'icons/obj/structure/urban/poles.dmi'
icon_state = "street_light"
layer = EFFECTS_ABOVE_LIGHTING_LAYER
/obj/effect/overlay/street_light/classic
icon_state = "classic_lamp_light"
density = 1
/obj/structure/utility_pole/street/on
desc = "A tall light source. This one shines brightly."
light_wedge = LIGHT_OMNI
light_color = "#e8ffeb"
light_range = 8
light_power = 1.9
/obj/structure/utility_pole/street/on/Initialize(mapload)
. = ..()
cut_overlays()
overlays += /obj/effect/overlay/street_light
return
/obj/structure/utility_pole/street/classic
icon_state = "classic_lamp"
/obj/structure/utility_pole/street/classic/on
desc = "A tall light source. This one shines brightly."
light_wedge = LIGHT_OMNI
light_color = LIGHT_COLOR_TUNGSTEN
light_range = 8
light_power = 1.9
/obj/structure/utility_pole/street/classic/on/Initialize(mapload)
. = ..()
cut_overlays()
overlays += /obj/effect/overlay/street_light/classic
return
/obj/effect/overlay/street_light/crosswalk
icon_state = "crosswalk_go"
/obj/structure/utility_pole/street/crosswalk
name = "crosswalk indicator"
desc = "A very tall crosswalk indicator which can be manually used to scan for danger, before letting the viewer know whether it's safe to cross the road or not."
icon_state = "crosswalk"
light_color = LIGHT_COLOR_GREEN
light_range = 3.1
light_power = 2.6
/obj/structure/utility_pole/street/crosswalk/Initialize(mapload)
. = ..()
cut_overlays()
overlays += /obj/effect/overlay/street_light/crosswalk
return
/obj/effect/overlay/street_light/traffic
icon_state = "traffic_lights"
/obj/effect/overlay/street_light/traffic/inverted
icon_state = "traffic_lights_inverse"
/obj/structure/utility_pole/street/traffic
name = "traffic indicator"
desc = "A very tall crosswalk indicator which can be used to better run red lights."
icon_state = "traffic"
light_color = LIGHT_COLOR_HALOGEN
light_range = 3.1
light_power = 2.6
/obj/structure/utility_pole/street/traffic/base/Initialize(mapload)
. = ..()
cut_overlays()
overlays += /obj/effect/overlay/street_light/traffic
return
/obj/structure/utility_pole/street/traffic/inverted/Initialize(mapload)
. = ..()
cut_overlays()
overlays += /obj/effect/overlay/street_light/traffic/inverted
return
/obj/structure/utility_pole/power
name = "power pole"
desc = "A very tall utility pole for urban infrastructure. This one is a basis for power lines overhead."
icon_state = "power"
/obj/structure/utility_pole/power/central
icon_state = "central"
/obj/effect/overlay/overhead_line
name = "overhead utility line"
icon = 'icons/obj/structure/urban/poles.dmi'
icon_state = "line"
layer = 9.1
/obj/effect/overlay/overhead_line/end
icon_state = "line_end"
+718
View File
@@ -0,0 +1,718 @@
/obj/structure/automobile
name = "generic automotive"
desc = "A newer model of automotive."
icon = 'icons/obj/structure/urban/cars.dmi'
icon_state = "car"
anchored = TRUE
density = TRUE
layer = 7
/obj/structure/automobile/random/Initialize(mapload)
. = ..()
cut_overlays()
name = "[pick("deluxe Shibata Sport automotive","beat-up Poplar Auto Group automotive","weathered Shibata Sport automotive","beat-up Langenfeld automotive","deluxe Langenfeld automotive","weathered Langenfeld automotive")]"
desc = "A [name] vehicle of working condition."
icon_state = "car[rand(1, 10)]"
return
/obj/structure/automobile/police
name = "police cruiser"
desc = "A police vehicle with all the bells and whistles you'd expect from a decently-funded agency."
icon_state = "copcar"
/obj/structure/automobile_filler
name = "vehicle"
desc = "A piece of a larger vehicle."
icon = 'icons/obj/structure/urban/cars.dmi'
icon_state = "blank"
anchored = TRUE
density = TRUE
/obj/structure/road_sign
name = "stop sign"
desc = "A stop sign to direct traffic. Sometimes a demand."
icon = 'icons/obj/structure/urban/road_signs.dmi'
icon_state = "stop"
layer = 9
anchored = TRUE
/obj/structure/road_sign/yield
name = "yield sign"
desc = "A yield sign which tells you to slow down, rather politely. Let's hope you listen."
icon_state = "yield"
/obj/structure/road_sign/pedestrian
name = "pedestrian passing sign"
desc = "A yellow sign which alerts you of bonus points ahead."
icon_state = "pedestrian"
/obj/structure/road_sign/turn
name = "turn ahead sign"
desc = "A sign which warns of an approaching turn to the right. Is it the right choice?"
icon_state = "right"
/obj/structure/road_sign/turn/left
desc = "A sign which warns of an approaching turn to the left. Is anything left?"
icon_state = "left"
/obj/structure/road_sign/street
name = "street sign"
desc = "A green, wide street sign with words telling you that you are indeed on a street."
icon_state = "street_big"
var/street_name = null
/obj/structure/road_sign/street/Initialize(mapload)
. = ..()
name = "[street_name]"
desc = "This sign indicates this crossing street is called [street_name]."
/obj/structure/stairs/urban
icon = 'icons/obj/structure/urban/ledges.dmi'
icon_state = "stairs-single"
layer = 2.01
opacity = 1
/obj/structure/stairs/urban/road_ramp
name = "inclined asphalt ramp"
desc = "A solid asphalt ramp to allow your vehicle to traverse inclines with ease."
icon_state = "road-ramp-center"
layer = 2.02
/obj/structure/stairs/urban/road_ramp/right
icon_state = "road-ramp-right"
/obj/structure/stairs/urban/road_ramp/left
icon_state = "road-ramp-left"
/obj/structure/closet/crate/bin/urban
name = "tall garbage can"
desc = "Garbage day!"
icon = 'icons/obj/structure/urban/infrastructure.dmi'
icon_state = "bin"
/obj/structure/closet/crate/bin/urban/compact
name = "discrete garbage can"
icon_state = "city-bin"
anchored = TRUE
/obj/structure/closet/crate/bin/urban/dumpster
name = "extra-wide hefty dumpster"
desc = "This trunk carries a lot of junk."
icon_state = "dumpster"
anchored = TRUE
/obj/structure/structural_support
name = "support structure"
desc = "A big, sturdy support beam to hold up a huge mass above your head."
icon = 'icons/obj/structure/industrial/infrastructure.dmi'
icon_state = "truss"
density = TRUE
anchored = TRUE
/obj/structure/structural_support/side
icon_state = "truss_side"
/obj/structure/urban/pylon
name = "vehicle charging pylon"
desc = "A vehicle-grade charging pylon attached to a nearby port."
icon = 'icons/obj/structure/urban/infrastructure.dmi'
icon_state = "chargepylon"
light_color = LIGHT_COLOR_CYAN
light_range = 1.2
density = TRUE
anchored = TRUE
/obj/structure/manhole
name = "sewer access manhole"
desc = "Probably a bad idea to open this."
icon = 'icons/obj/structure/urban/infrastructure.dmi'
icon_state = "manhole_closed"
anchored = TRUE
var/open = 0
/obj/structure/manhole/attackby(obj/item/W as obj, mob/user as mob)
if(W.iscrowbar())
playsound(src.loc, 'sound/effects/stonedoor_openclose.ogg', 50, 1)
to_chat(user, "You forcibly relocate the manhole, hopefully in the right way.")
if(!open)
visible_message("<span class='warning'>A horrid smell erupts from the abyss of the manhole, not one any soul should inhale. Some mistakes were made.</span>")
icon_state = "manhole_open"
desc = "This looks pretty dangerous, stinks horribly, and doesn't have a ladder inside. Watch out!"
open = 1
var/turf/turf = loc
turf.is_hole = TRUE
return
if(open)
visible_message("<span class='warning'>The manhole clunks and seals back into place, safely burying our problems underground for someone else later.</span>")
icon_state = "manhole_closed"
desc = "It looks recently opened and sloppily closed."
open = 0
var/turf/turf = loc
turf.is_hole = FALSE
return
/obj/structure/hydrant
name = "water line hydrant"
desc = "An emergency water hydrant for emergency watering of things."
icon = 'icons/obj/structure/urban/infrastructure.dmi'
icon_state = "hydrant"
layer = ABOVE_ALL_MOB_LAYER
anchored = TRUE
/obj/structure/parking_meter
name = "parking meter"
desc = "A parking meter that seems to be turned off."
icon = 'icons/obj/structure/urban/infrastructure.dmi'
icon_state = "parking"
layer = ABOVE_ALL_MOB_LAYER
anchored = TRUE
/obj/structure/television
name = "wide-screen television"
desc = "A fancy wide-screen television with a wide selection of channels."
icon = 'icons/obj/structure/urban/infrastructure.dmi'
icon_state = "television"
anchored = TRUE
/obj/structure/dressing_divider
name = "wardrobe dressing divider"
desc = "A divider for an environment where you're probably swapping clothes, made with your privacy in mind."
icon = 'icons/obj/structure/urban/tailoring.dmi'
icon_state = "divider1"
layer = ABOVE_ALL_MOB_LAYER
anchored = TRUE
/obj/structure/neon_sign
name = "large neon sign"
desc = "A bright neon sign, an advertisement of some dystopian sort."
icon = 'icons/obj/structure/urban/konyang_neon.dmi'
icon_state = "sign1"
anchored = TRUE
layer = 7
/obj/structure/shipping_container
name = "freight container"
desc = "A hulking industrial shipping container, bound for who knows where."
icon = 'icons/obj/structure/industrial/shipping_containers.dmi'
icon_state = "blue1"
anchored = TRUE
density = TRUE
layer = 7
/obj/effect/overlay/container_logo
name = "Hephaestus Industries emblem"
icon = 'icons/obj/structure/industrial/shipping_containers.dmi'
icon_state = "heph1"
layer = 7.01
/obj/effect/overlay/container_logo/einstein
name = "Einstein Engines emblem"
icon_state = "ee1"
/obj/effect/overlay/container_logo/zenghu
name = "Zeng-Hu Pharmaceuticals emblem"
icon_state = "zeng1"
//Special railings for urban environments. These have almost no reason to be seen anywhere else so they exclude all of the complexities of normal railings
/obj/structure/rod_railing
name = "rod railing"
desc = "A flimsy rod railing bound together by screws and prayers."
icon = 'icons/obj/structure/urban/blockers.dmi'
icon_state = "rod_railing"
density = TRUE
throwpass = TRUE
climbable = TRUE
layer = 4.01
anchored = TRUE
/obj/structure/rod_railing/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(istype(mover,/obj/item/projectile))
return TRUE
if(!istype(mover) || mover.checkpass(PASSRAILING))
return TRUE
if(mover.throwing)
return TRUE
if(get_dir(loc, target) == dir)
return !density
return TRUE
/obj/structure/rod_railing/CheckExit(var/atom/movable/O, var/turf/target)
if(istype(O) && CanPass(O, target))
return TRUE
if(get_dir(O.loc, target) == dir)
if(!density)
return TRUE
return FALSE
return TRUE
/obj/structure/dam
name = "concrete dam"
desc = "A hulking mass of concrete meant to hold in a large reservoir of water from passing downwards."
icon = 'icons/obj/structure/urban/blockers.dmi'
icon_state = "dam1"
density = TRUE
throwpass = TRUE
anchored = TRUE
layer = 4.01
/obj/structure/road_barrier
name = "roadway barrier"
desc = "A set of expendable plates meant to deflect the impact of vehicles, lest they intend to go into more dangerous areas off the road."
icon = 'icons/obj/structure/urban/road_edges.dmi'
icon_state = "guard"
density = TRUE
throwpass = TRUE
climbable = TRUE
anchored = TRUE
layer = 4.01
//smoothing these things would suck so here you go. i have no idea why you would want these buildable. map them manually
/obj/structure/road_barrier/bot_in
icon_state = "guard_bot_in"
/obj/structure/road_barrier/top_in
icon_state = "guard_top_in"
/obj/structure/road_barrier/bot_end
icon_state = "guard_bot_end"
/obj/structure/road_barrier/top_end
icon_state = "guard_top_end"
/obj/structure/road_barrier/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(istype(mover,/obj/item/projectile))
return TRUE
if(!istype(mover) || mover.checkpass(PASSRAILING))
return TRUE
if(mover.throwing)
return TRUE
if(get_dir(loc, target) == dir)
return !density
return TRUE
/obj/structure/road_barrier/CheckExit(var/atom/movable/O, var/turf/target)
if(istype(O) && CanPass(O, target))
return TRUE
if(get_dir(O.loc, target) == dir)
if(!density)
return TRUE
return FALSE
return TRUE
/obj/structure/chainlink_fence
name = "chainlink industrial fencing"
desc = "A tall, imposing metal fence. Not to be confused with the slightly more popular Chainlink of recent years."
icon = 'icons/obj/structure/industrial/fencing_tall.dmi'
density = TRUE
icon_state = "fence"
color = null
anchored = TRUE
can_be_unanchored = FALSE
layer = ABOVE_ALL_MOB_LAYER
/obj/structure/chainlink_fence/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(istype(mover,/obj/item/projectile))
return TRUE
if(!istype(mover) || mover.checkpass(PASSRAILING))
return TRUE
if(mover.throwing)
return TRUE
if(get_dir(loc, target) == dir)
return !density
return TRUE
/obj/structure/chainlink_fence/CheckExit(var/atom/movable/O, var/turf/target)
if(istype(O) && CanPass(O, target))
return TRUE
if(get_dir(O.loc, target) == dir)
if(!density)
return TRUE
return FALSE
return TRUE
/obj/structure/rope_railing
name = "wooden rope"
desc = "A simple rope tied off to protect against careless trespass."
icon = 'icons/obj/structure/urban/wood.dmi'
icon_state = "rope-railing"
density = TRUE
color = null
anchored = TRUE
can_be_unanchored = FALSE
layer = 3.01
/obj/structure/rope_railing/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(istype(mover,/obj/item/projectile))
return TRUE
if(!istype(mover) || mover.checkpass(PASSRAILING))
return TRUE
if(mover.throwing)
return TRUE
if(get_dir(loc, target) == dir)
return !density
return TRUE
/obj/structure/rope_railing/CheckExit(var/atom/movable/O, var/turf/target)
if(istype(O) && CanPass(O, target))
return TRUE
if(get_dir(O.loc, target) == dir)
if(!density)
return TRUE
return FALSE
return TRUE
/obj/structure/rope_post
name = "wooden rope post"
desc = "A simple pole driven into something, for tying ropes onto."
icon = 'icons/obj/structure/urban/wood.dmi'
icon_state = "post"
density = FALSE
anchored = TRUE
layer = 3
/obj/structure/statue
name = "statue of Neopolymus"
desc = "A statue of Neopolymus, an IPC brought to fame in Tau Ceti as the first to be held to trial for the murder of a Human. A heated debate continues today as to the validity and bias of the court as the positronic ultimately met a memory wipe, followed by deconstruction."
icon = 'icons/obj/structure/urban/statues.dmi'
icon_state = "neopolymus"
density = TRUE
anchored = TRUE
layer = ABOVE_ALL_MOB_LAYER
/obj/structure/statue/buddha
name = "buddha statue"
desc = "A bronze statue of the Amitabha Buddha, the Buddha of Limitless Light."
icon_state = "buddha"
/obj/structure/sign/urban
name = "exit sign"
desc = "A sign indicating where you should probably go in a hurry."
icon = 'icons/obj/structure/urban/infrastructure.dmi'
icon_state = "exit"
layer = ABOVE_ALL_MOB_LAYER
/obj/structure/sign/urban/drive_thru
name = "drive thru sign"
desc = "A drive-thru sign."
icon = 'icons/obj/structure/urban/restaurant.dmi'
icon_state = "drivethru"
density = 1
/obj/structure/sign/urban/restroom
name = "restroom sign"
desc = "A sign indicating where you can find a restroom."
icon_state = "restroom"
/obj/structure/sign/urban/staff
name = "staff only sign"
desc = "A sign that warns of this entry being barred to the public."
icon_state = "staff"
/obj/structure/restaurant_menu
name = "restaurant menu"
desc = "A sign displaying a variety of delectable meals."
icon = 'icons/obj/structure/urban/restaurant.dmi'
icon_state = "menu_off"
density = 1
layer = ABOVE_ALL_MOB_LAYER
light_color = LIGHT_COLOR_CYAN
light_range = 1.8
var/menu_text = ""
/obj/structure/restaurant_menu/attack_hand(mob/user)
var/new_text = sanitize(input(user, "Enter new text for the hologram to display.", "Hologram Display", html2pencode(menu_text, TRUE)) as null|message)
if(!isnull(new_text))
menu_text = pencode2html(new_text)
update_icon()
/obj/structure/restaurant_menu/attackby(obj/item/I, mob/user)
if(istype(I, /obj/item/paper))
var/obj/item/paper/P = I
to_chat(user, SPAN_NOTICE("You scan \the [I.name] into \the [name]."))
menu_text = P.info
menu_text = replacetext(menu_text, "color=black>", "color=white>")
icon_state = "menu_active"
update_icon()
return TRUE
return ..()
/obj/structure/sign/urban/konyang
name = "convenience store sign"
desc = "A sign labeling the structure as a 24-7 MINI MART. Convenient!"
icon = 'icons/obj/structure/urban/konyang_signs.dmi'
icon_state = "shop_sign"
/obj/structure/sign/urban/konyang/police
name = "police station sign"
desc = "A sign labeling the structure as a Konyang police department building."
icon_state = "police_sign"
/obj/structure/sign/urban/konyang/robotics
name = "robotics clinic sign"
desc = "A sign labeling the structure as a robotics and clinical support building."
icon_state = "krc_sign"
/obj/structure/sign/urban/konyang/bar
name = "club and bar sign"
desc = "A sign labeling the structure as the Resting Tiger nightclub and bar."
icon_state = "bar_sign"
/obj/structure/sign/urban/konyang/arcade
name = "arcade sign"
desc = "A sign labeling the structure as a very cool arcade."
icon_state = "arcade_sign"
/obj/structure/sign/urban/konyang/pharmacy
name = "pharmacy sign"
desc = "A sign labeling the structure as a Konyang health and supply pharmacy."
icon_state = "pharmacy_sign"
/obj/structure/window/urban
icon = 'icons/obj/structure/urban/windows_tall.dmi'
icon_state = "wood"
basestate = "wood"
maxhealth = 60
alpha = 255
/obj/structure/window/urban/framed
icon_state = "wood_framed"
basestate = "wood_framed"
/obj/structure/window/urban/external
icon = 'icons/obj/structure/urban/building_external.dmi'
icon_state = "window_half"
basestate = "window_half"
/obj/structure/window/urban/full
icon = 'icons/obj/structure/urban/building_external.dmi'
icon_state = "window_full"
basestate = "window_full"
/obj/structure/window_frame/urban
name = "window frame"
desc = "A window frame."
icon = 'icons/obj/structure/urban/building_external.dmi'
icon_state = "frame_half"
//basestate = "frame_half"
color = COLOR_GUNMETAL
smooth = null
/obj/structure/window_frame/urban/full
name = "window frame"
desc = "A window frame."
icon = 'icons/obj/structure/urban/building_external.dmi'
icon_state = "frame_full"
//basestate = "frame_full"
color = COLOR_WHITE
/obj/structure/window_frame/urban/red
color = COLOR_PALE_RED_GRAY
/obj/structure/window_frame/urban/blue
color = COLOR_COMMAND_BLUE
/obj/structure/blocker/exterior_wall//for planting against urban structure sprites to resemble buildings better. Should be manually mapped over wall types.
name = "tall building wall"
desc = "The exterior of a large building."
color = COLOR_GUNMETAL
icon = 'icons/obj/structure/urban/building_external.dmi'
icon_state = "wall_half"
//basestate = "wall_half"
health = 200
maxhealth = 200
layer = ABOVE_ALL_MOB_LAYER
/obj/structure/blocker/exterior_wall/red
color = COLOR_PALE_RED_GRAY
/obj/structure/blocker/exterior_wall/blue
color = COLOR_COMMAND_BLUE
/obj/structure/cash_register
name = "cash register machine"
desc = "A retail nightmare object."
desc_info = "Drag this onto yourself to open the cash compartment."
icon = 'icons/obj/structure/urban/infrastructure.dmi'
icon_state = "cashier"
layer = 2.99
density = 0
anchored = 0
var/storage_type = /obj/item/storage/toolbox/cash_register_storage
var/obj/item/storage/storage_compartment
/obj/structure/cash_register/Initialize(mapload)
. = ..()
if(storage_type)
storage_compartment = new storage_type(src)
/obj/item/storage/toolbox/cash_register_storage
name = "cash compartment"
/obj/structure/cash_register/MouseDrop(atom/over)
if(usr == over && ishuman(over))
var/mob/living/carbon/human/H = over
storage_compartment.open(H)
/**
* # Urban doors
*
* Your average house door, gets locked and unlocked by a [/obj/item/key/door_key] and can optionally support IDs too
*
* Once unlocked with a key, it basically becomes a free access door, until locked back with a key
*
* Use `req_one_access` and `req_access`, like normal doors, to control which keys can unlock the door
* Set `support_ids` to TRUE to also use the IDs logic
*
* If `support_ids` is TRUE and a door is opened using an ID, it will not become a public door
*/
/obj/machinery/door/urban
name = "wooden panel door"
desc = "A delicate wooden door with a pristine bronze knob."
icon = 'icons/obj/structure/urban/unique_simple_doors.dmi'
icon_state = "wood_closed"
pixel_x = -16
pixel_y = -16
autoclose = FALSE
var/base_icon = "wood"
///Boolean, if the door also supports normal ID openings (read the ID access), or it's key only
var/support_ids = FALSE
///Stores the previous list of req_one_access, that gets readded when the door is locked with the key
var/list/previous_req_one_access = list()
///Stores the previous list of req_access, that gets readded when the door is locked with the key
var/list/previous_req_access = list()
/obj/machinery/door/urban/update_icon()
if(density)
icon_state = "[base_icon]_closed"
else
icon_state = "[base_icon]_open"
return
/obj/machinery/door/urban/do_animate(animation)
switch(animation)
if("opening")
//Don't play the animation if it's already open
if(!src.density)
return
if(p_open)
flick("[base_icon]c0", src)
else
flick("[base_icon]c0", src)
if("closing")
//Don't play the animation if it's already closed
if(src.density)
return
if(p_open)
flick("[base_icon]c1", src)
else
flick("[base_icon]c1", src)
return
/obj/machinery/door/urban/attackby(obj/item/I, mob/user)
if(istype(I, /obj/item/key/door_key))
if(check_access(I))
if(src.density && !(length(previous_req_one_access) || length(previous_req_access)))
//Only say that it's unlocked if there actually was an access list that did the locking
if(length(src.req_one_access) || length(src.req_access))
balloon_alert_to_viewers("*unlocks*")
to_chat(user, SPAN_NOTICE("You unlock \the [src]."))
open()
//Save the list of accesses and empty them up
if(length(src.req_one_access))
previous_req_one_access = src.req_one_access.Copy()
src.req_one_access = list()
if(length(src.req_access))
previous_req_access = src.req_access.Copy()
src.req_access = list()
else
//Only say that it's locked if there actually is an access list that does the locking
if(length(previous_req_one_access) || length(previous_req_access))
balloon_alert_to_viewers("*locks*")
to_chat(user, SPAN_NOTICE("You lock \the [src]."))
close()
//Readd the list of accesses, and empty up the previous access lists
if(length(previous_req_one_access))
src.req_one_access = previous_req_one_access.Copy()
previous_req_one_access = list()
if(length(previous_req_access))
src.req_access = previous_req_access.Copy()
previous_req_access = list()
else
balloon_alert_to_viewers("*rattles*")
//Check with our parent, in case it's not a key
else
. = ..()
/obj/machinery/door/urban/allowed(mob/M)
var/parent_allowed = ..()
//If we support IDs, or we are a public door, return the result of the parent, otherwise we're locked
if(support_ids || !(length(src.req_one_access) || length(src.req_access)))
return parent_allowed
else
return FALSE //Keys only
/**
* # Door keys
*
* A key that opens a door, you probably use this everyday
*
* Locks and unlocks doors of type [/obj/machinery/door/urban]
*
* Set in `access_list` a list of IDs that the key has, which in turn determine which doors it can open, based on
* `req_one_access` and `req_access` logic
*/
/obj/item/key/door_key
name = "Door key"
desc = "A key that unlocks a door"
///A list of IDs that the key can lock/unlock
var/list/access_list = list()
/**
* Initializes a door_key
*
* * accesses - A list with accesses that the key has, or null if defined in either the map, public access door or other means
*/
/obj/item/key/door_key/Initialize(var/list/accesses = null)
SHOULD_CALL_PARENT(TRUE)
. = ..()
if(accesses)
if(islist(access_list))
src.access_list = accesses.Copy()
else
crash_with("Someone is trying to initialize a door_key without a list or null!")
/obj/item/key/door_key/GetAccess()
return access_list