[MIRROR] Adds a new redgate map: The Casino Canal (#11868)
Co-authored-by: Ryumi <ghosttehspychecka@gmail.com> Co-authored-by: C.L. <killer65311@gmail.com>
@@ -90,7 +90,7 @@ GLOBAL_VAR_INIT(refid_filter, TYPEID(filter(type="angular_blur")))
|
||||
#define is_vehicle_inpassable(A) (istype(A, /turf/space) || istype(A, /turf/simulated/floor/water) || istype(A, /turf/simulated/floor/lava))
|
||||
|
||||
// Diveable water
|
||||
#define isdiveablewater(A) istype(A, /turf/simulated/floor/water/deep/ocean/diving)
|
||||
#define isdiveablewater(A) (istype(A, /turf/simulated/floor/water/deep/ocean/diving) || istype(A, /turf/simulated/floor/water/underwater/open) || istype(A, /turf/simulated/floor/water/underwater/indoors/open))
|
||||
|
||||
/// NaN isn't a number, damn it. Infinity is a problem too.
|
||||
#define isnum_safe(x) ( isnum((x)) && !isnan((x)) && !isinf((x)) )
|
||||
|
||||
@@ -133,3 +133,10 @@
|
||||
cell = W
|
||||
to_chat(user, "You insert the power cell.")
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/floodlight/starts_on
|
||||
icon_state = "flood01"
|
||||
|
||||
/obj/machinery/floodlight/starts_on/Initialize(mapload)
|
||||
. = ..()
|
||||
turn_on()
|
||||
|
||||
@@ -308,6 +308,12 @@
|
||||
icon_state = "tile_white"
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/tile/floor/purple
|
||||
name = "purple floor tile"
|
||||
singular_name = "purple floor tile"
|
||||
color = COLOR_PURPLE_GRAY
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/tile/floor/dark
|
||||
name = "dark floor tile"
|
||||
singular_name = "dark floor tile"
|
||||
|
||||
@@ -436,3 +436,40 @@
|
||||
prob(5);/obj/item/clothing/suit/shibari/black,
|
||||
prob(5);/obj/item/clothing/suit/shibari/pink
|
||||
)
|
||||
|
||||
/obj/random/chips
|
||||
name = "random chips"
|
||||
icon_state = "chips"
|
||||
spawn_nothing_percentage = 10
|
||||
|
||||
/obj/random/chips/item_to_spawn()
|
||||
return pick(
|
||||
prob(35);/obj/item/spacecasinocash/c1,
|
||||
prob(10);/obj/item/spacecasinocash/c10,
|
||||
prob(5);/obj/item/spacecasinocash/c100,
|
||||
)
|
||||
|
||||
/obj/random/chips/better
|
||||
name = "better random chips"
|
||||
icon_state = "chips_1"
|
||||
spawn_nothing_percentage = 0
|
||||
|
||||
/obj/random/chips/item_to_spawn()
|
||||
return pick(
|
||||
prob(35);/obj/item/spacecasinocash/c10,
|
||||
prob(15);/obj/item/spacecasinocash/c100,
|
||||
prob(5);/obj/item/spacecasinocash/c200,
|
||||
prob(1);/obj/item/spacecasinocash/c500,
|
||||
)
|
||||
|
||||
/obj/random/chips/good
|
||||
name = "good random chips"
|
||||
icon_state = "chips_2"
|
||||
|
||||
/obj/random/chips/item_to_spawn()
|
||||
return pick(
|
||||
prob(45);/obj/item/spacecasinocash/c100,
|
||||
prob(15);/obj/item/spacecasinocash/c200,
|
||||
prob(5);/obj/item/spacecasinocash/c500,
|
||||
prob(1);/obj/item/spacecasinocash/c1000,
|
||||
)
|
||||
|
||||
@@ -350,6 +350,18 @@
|
||||
desc_with_canvas = "A piece of art (or \"art\"). Anyone could've hung it."
|
||||
persistence_id = "public"
|
||||
|
||||
/obj/structure/sign/painting/public/north
|
||||
pixel_y = 30
|
||||
|
||||
/obj/structure/sign/painting/public/south
|
||||
pixel_y = -30
|
||||
|
||||
/obj/structure/sign/painting/public/east
|
||||
pixel_x = 30
|
||||
|
||||
/obj/structure/sign/painting/public/west
|
||||
pixel_x = -30
|
||||
|
||||
/obj/structure/sign/painting/library_secure
|
||||
name = "\improper Curated Painting Exhibit mounting"
|
||||
desc = "For masterpieces hand-picked by the librarian."
|
||||
|
||||
@@ -379,6 +379,10 @@ var/list/flooring_types
|
||||
/decl/flooring/tiling/new_tile/monotile
|
||||
icon_base = "monotile"
|
||||
|
||||
/decl/flooring/tiling/new_tile/monotile/purple
|
||||
icon_base = "monotile-purple"
|
||||
build_type = /obj/item/stack/tile/floor/purple
|
||||
|
||||
/decl/flooring/tiling/new_tile/steel_grid
|
||||
icon_base = "steel_grid"
|
||||
build_type = /obj/item/stack/tile/floor/steelgrip
|
||||
@@ -431,6 +435,12 @@ var/list/flooring_types
|
||||
has_damage_range = null
|
||||
build_type = /obj/item/stack/tile/floor/yellow
|
||||
|
||||
/decl/flooring/tiling/purple
|
||||
name = "floor"
|
||||
icon_base = "purple"
|
||||
has_damage_range = null
|
||||
build_type = /obj/item/stack/tile/floor/purple
|
||||
|
||||
/decl/flooring/tiling/dark
|
||||
name = "floor"
|
||||
desc = "How ominous."
|
||||
|
||||
@@ -215,6 +215,10 @@
|
||||
icon_state = "monotile"
|
||||
initial_flooring = /decl/flooring/tiling/new_tile/monotile
|
||||
|
||||
/turf/simulated/floor/tiled/monotile/purple
|
||||
icon_state = "monotile-purple"
|
||||
initial_flooring = /decl/flooring/tiling/new_tile/monotile/purple
|
||||
|
||||
/turf/simulated/floor/tiled/steel_grid
|
||||
name = "floor"
|
||||
icon = 'icons/turf/flooring/tiles_vr.dmi'
|
||||
@@ -406,6 +410,11 @@
|
||||
icon_state = "white"
|
||||
initial_flooring = /decl/flooring/tiling/yellow
|
||||
|
||||
/turf/simulated/floor/tiled/purple
|
||||
name = "purple floor"
|
||||
icon_state = "purple"
|
||||
initial_flooring = /decl/flooring/tiling/purple
|
||||
|
||||
/turf/simulated/floor/tiled/freezer
|
||||
name = "tiles"
|
||||
icon_state = "freezer"
|
||||
|
||||
@@ -259,6 +259,9 @@ CHOMP Removal End */
|
||||
flooring_override = pickweight(possibledirts)
|
||||
return ..()
|
||||
|
||||
/turf/simulated/floor/outdoors/newdirt_nograss/caves
|
||||
outdoors = OUTDOORS_NO
|
||||
|
||||
/turf/simulated/floor/outdoors/sidewalk
|
||||
name = "sidewalk"
|
||||
desc = "Concrete shaped into a path!"
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
|
||||
/turf/simulated/floor/water/underwater
|
||||
name = "sea floor"
|
||||
desc = "It's the bottom of the sea, there's water all over the place!"
|
||||
@@ -93,3 +94,91 @@
|
||||
icon_state = "wood-broken0" // So it shows up in the map editor as water.
|
||||
water_icon = 'icons/turf/flooring/wood_vr.dmi'
|
||||
water_state = "wood-broken0"
|
||||
|
||||
/turf/simulated/floor/water/underwater/rocks
|
||||
icon_state = "rock"
|
||||
|
||||
/turf/simulated/floor/water/underwater/open
|
||||
icon = 'icons/effects/weather.dmi'
|
||||
icon_state = "underwater-indoors" // Just looks underwater in the map editor, will be invisible once ingame
|
||||
name = "deeper waters"
|
||||
desc = "The watery depths seem to go even deeper here."
|
||||
|
||||
/turf/simulated/floor/water/underwater/open/update_icon()
|
||||
. = ..()
|
||||
icon = 'icons/turf/open_space.dmi'
|
||||
icon_state = "black_open_lighter"
|
||||
|
||||
/turf/simulated/floor/water/underwater/open/LateInitialize()
|
||||
. = ..()
|
||||
AddElement(/datum/element/turf_z_transparency, FALSE)
|
||||
|
||||
/turf/simulated/floor/water/underwater/open/CanZPass(atom/A, direction, recursive)
|
||||
return TRUE
|
||||
|
||||
/turf/simulated/floor/water/underwater/open/handle_water_icons()
|
||||
// We'll rely on the turfs below for water visuals!
|
||||
SHOULD_CALL_PARENT(FALSE)
|
||||
var/atom/movable/weather_visuals/visuals = new(null)
|
||||
visuals.icon = 'icons/effects/weather.dmi'
|
||||
visuals.icon_state = "underwater"
|
||||
vis_contents += visuals
|
||||
|
||||
// Indoors variants that do not use outdoor lighting, and must re-add water overlay icons since they won't be relying on the weather system to do it!
|
||||
|
||||
/turf/simulated/floor/water/underwater/indoors
|
||||
outdoors = OUTDOORS_NO
|
||||
var/overlay_icon = 'icons/effects/weather.dmi'
|
||||
var/overlay_state = "underwater-indoors"
|
||||
var/atom/movable/weather_visuals/visuals
|
||||
|
||||
/turf/simulated/floor/water/underwater/indoors/handle_water_icons()
|
||||
SHOULD_CALL_PARENT(FALSE)
|
||||
var/atom/movable/weather_visuals/visuals = new(null)
|
||||
visuals.icon = overlay_icon
|
||||
visuals.icon_state = overlay_state
|
||||
vis_contents += visuals
|
||||
|
||||
/turf/simulated/floor/water/underwater/indoors/open
|
||||
icon = 'icons/effects/weather.dmi'
|
||||
icon_state = "underwater-indoors" // Just looks underwater in the map editor, will be invisible once ingame
|
||||
name = "deeper waters"
|
||||
desc = "The watery depths seem to go even deeper here."
|
||||
|
||||
/turf/simulated/floor/water/underwater/indoors/open/LateInitialize()
|
||||
. = ..()
|
||||
AddElement(/datum/element/turf_z_transparency, FALSE)
|
||||
|
||||
/turf/simulated/floor/water/underwater/indoors/open/update_icon()
|
||||
. = ..()
|
||||
icon = 'icons/turf/open_space.dmi'
|
||||
icon_state = "black_open_lighter"
|
||||
|
||||
/turf/simulated/floor/water/underwater/indoors/open/CanZPass(atom/A, direction, recursive)
|
||||
return TRUE
|
||||
|
||||
/turf/simulated/floor/water/underwater/indoors/cult
|
||||
icon = 'icons/turf/flooring/cult.dmi'
|
||||
icon_state = "cult"
|
||||
|
||||
/turf/simulated/floor/water/underwater/indoors/ruins
|
||||
icon = 'maps/redgate/falls/icons/turfs/marble.dmi'
|
||||
icon_state = "1"
|
||||
|
||||
/turf/simulated/floor/water/underwater/indoors/sand
|
||||
icon = 'icons/misc/beach.dmi'
|
||||
icon_state = "sand"
|
||||
|
||||
/turf/simulated/floor/water/underwater/indoors/wood
|
||||
icon = 'icons/turf/flooring/wood_vr.dmi'
|
||||
icon_state = "wood"
|
||||
|
||||
/turf/simulated/floor/water/underwater/indoors/woodbroken
|
||||
icon = 'icons/turf/flooring/wood_vr.dmi'
|
||||
icon_state = "wood-broken0"
|
||||
|
||||
/turf/simulated/floor/water/underwater/indoors/rocks
|
||||
icon_state = "rock"
|
||||
|
||||
/turf/simulated/floor/water/underwater/indoors/rocks/vis_hide
|
||||
flags = TURF_ACID_IMMUNE | VIS_HIDE
|
||||
|
||||
@@ -702,6 +702,12 @@
|
||||
strict_blending = TRUE
|
||||
diagonal_blending = TRUE
|
||||
|
||||
/turf/simulated/wall/tgmc/window/CanPass(atom/movable/mover, turf/target)
|
||||
// This IS a glass window, so things that can pass glass should pass through here!
|
||||
if(istype(mover) && mover.checkpass(PASSGLASS))
|
||||
return TRUE
|
||||
return ..()
|
||||
|
||||
/turf/simulated/wall/tgmc/window/rwall
|
||||
icon_state = "rwall_window0"
|
||||
wall_base_state = "rwall_window"
|
||||
|
||||
@@ -24,6 +24,11 @@
|
||||
|
||||
var/watercolor = null
|
||||
|
||||
/turf/simulated/floor/water/proc/handle_water_icons()
|
||||
icon_state = under_state // This isn't set at compile time in order for it to show as water in the map editor.
|
||||
var/image/water_sprite = image(icon = water_icon, icon_state = water_state, layer = WATER_LAYER)
|
||||
add_overlay(water_sprite)
|
||||
|
||||
/turf/simulated/floor/water/Initialize(mapload)
|
||||
. = ..()
|
||||
update_icon()
|
||||
@@ -39,10 +44,7 @@
|
||||
|
||||
/turf/simulated/floor/water/update_icon()
|
||||
..() // To get the edges.
|
||||
|
||||
icon_state = under_state // This isn't set at compile time in order for it to show as water in the map editor.
|
||||
var/image/water_sprite = image(icon = water_icon, icon_state = water_state, layer = WATER_LAYER)
|
||||
add_overlay(water_sprite)
|
||||
handle_water_icons()
|
||||
|
||||
/turf/simulated/floor/water/get_edge_icon_state()
|
||||
return "water_shallow"
|
||||
|
||||
@@ -1,43 +0,0 @@
|
||||
/datum/playingcard/casino
|
||||
name = "playing card"
|
||||
card_icon = "card_back"
|
||||
back_icon = "card_back"
|
||||
|
||||
/obj/item/deck/casino
|
||||
w_class = ITEMSIZE_SMALL
|
||||
cooldown = 0 // to prevent spam shuffle
|
||||
|
||||
/obj/item/deck/holder/casino //WIP In future do a cool holder
|
||||
name = "card box"
|
||||
desc = "A small leather case to show how classy you are compared to everyone else."
|
||||
icon_state = "card_holder"
|
||||
|
||||
/obj/item/deck/cards/casino
|
||||
name = "deck of casino cards"
|
||||
desc = "A deck of playing cards from the golden goose casino, comes without a joker card!"
|
||||
icon_state = "casino_deck"
|
||||
|
||||
/obj/item/deck/cards/casino/Initialize(mapload)
|
||||
. = ..()
|
||||
var/datum/playingcard/casino/P
|
||||
for(var/suit in list("spades","clubs","diamonds","hearts"))
|
||||
|
||||
var/colour
|
||||
if(suit == "spades" || suit == "clubs")
|
||||
colour = "black_"
|
||||
else
|
||||
colour = "red_"
|
||||
|
||||
for(var/number in list("ace","two","three","four","five","six","seven","eight","nine","ten"))
|
||||
P = new()
|
||||
P.name = "[number] of [suit]"
|
||||
P.card_icon = "casino_[colour]num"
|
||||
P.back_icon = "casino_card_back"
|
||||
cards += P
|
||||
|
||||
for(var/number in list("jack","queen","king"))
|
||||
P = new()
|
||||
P.name = "[number] of [suit]"
|
||||
P.card_icon = "casino_[colour]col"
|
||||
P.back_icon = "casino_card_back"
|
||||
cards += P
|
||||
@@ -240,3 +240,10 @@ var/static/list/fake_sunlight_zs = list()
|
||||
"color" = "#1c49ff"
|
||||
)
|
||||
)
|
||||
/obj/effect/fake_sun/underwater/lighter
|
||||
possible_light_setups = list(
|
||||
list(
|
||||
"brightness" = 1,
|
||||
"color" = "#4bd1f3"
|
||||
)
|
||||
)
|
||||
|
||||
@@ -68,19 +68,31 @@
|
||||
if(!isobserver(src)) //Make sure they're an observer!
|
||||
return
|
||||
|
||||
var/list/ar = list()
|
||||
for(var/obj/machinery/transhuman/autoresleever/A in world)
|
||||
// Set up an assorted list of auto-resleevers using their area name as the key, (as there should only ever be one per area)
|
||||
var/list/autoresleevers = list()
|
||||
for(var/obj/machinery/transhuman/autoresleever/A in GLOB.active_autoresleevers)
|
||||
if(A.spawntype)
|
||||
continue
|
||||
else
|
||||
ar |= A
|
||||
var/area/resleever_area = get_area(A)
|
||||
autoresleevers[resleever_area.name] = A
|
||||
|
||||
var/obj/machinery/transhuman/autoresleever/thisone = pick(ar)
|
||||
var/obj/machinery/transhuman/autoresleever/chosen_resleever = null
|
||||
if(length(autoresleevers) > 1)
|
||||
// Prompt user to choose which one they wanna go to
|
||||
var/choice = tgui_input_list(src, "There are multiple auto-resleevers available! Choose one.", "Choose Auto-Resleever", autoresleevers)
|
||||
if(!choice)
|
||||
// well okay then :L
|
||||
return
|
||||
chosen_resleever = autoresleevers[choice]
|
||||
else
|
||||
// If there's less than one, just choose whatever one is available (if any)
|
||||
chosen_resleever = autoresleevers[pick(autoresleevers)]
|
||||
|
||||
if(!thisone)
|
||||
if(!chosen_resleever)
|
||||
to_chat(src, span_warning("There appears to be no auto-resleevers available."))
|
||||
return
|
||||
var/L = get_turf(thisone)
|
||||
var/L = get_turf(chosen_resleever)
|
||||
if(!L)
|
||||
to_chat(src, span_warning("There appears to be something wrong with this auto-resleever, try again."))
|
||||
return
|
||||
|
||||
@@ -178,10 +178,9 @@
|
||||
ai_log("handle_wander_movement() : Entered.", AI_LOG_TRACE)
|
||||
if(isturf(holder.loc) && can_act())
|
||||
wander_delay--
|
||||
var/turf/simulated/floor/water/deep/ocean/diving/sink = holder.loc
|
||||
var/turf/simulated/floor/water/underwater/surface = holder.loc
|
||||
var/mob/living/simple_mob/H = holder
|
||||
if(istype(sink) && H.vore_fullness)
|
||||
if(isdiveablewater(holder.loc) && H.vore_fullness)
|
||||
holder.zMove(DOWN)
|
||||
wander_delay = base_wander_delay
|
||||
else if(istype(surface) && !H.vore_fullness)
|
||||
|
||||
@@ -54,8 +54,7 @@
|
||||
return 0
|
||||
|
||||
if(direction == DOWN)
|
||||
var/turf/simulated/floor/water/deep/ocean/diving/sink = start
|
||||
if(istype(sink) && !destination.density)
|
||||
if(isdiveablewater(start) && !destination.density)
|
||||
var/pull_up_time = max((3 SECONDS + (src.movement_delay() * 10) * swim_modifier), 1)
|
||||
to_chat(src, span_notice("You start diving underwater..."))
|
||||
src.audible_message(span_notice("[src] begins to dive under the water."), runemessage = "splish splosh")
|
||||
@@ -90,7 +89,7 @@
|
||||
to_chat(src, span_warning("You gave up on pulling yourself up."))
|
||||
return 0
|
||||
|
||||
else if(istype(destination, /turf/simulated/floor/water/deep/ocean/diving))
|
||||
else if(isdiveablewater(destination))
|
||||
var/pull_up_time = max((5 SECONDS + (src.movement_delay() * 10) * swim_modifier), 1)
|
||||
to_chat(src, span_notice("You start swimming upwards..."))
|
||||
src.audible_message(span_notice("[src] begins to swim towards the surface."), runemessage = "splish splosh")
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
GLOBAL_LIST_EMPTY(active_autoresleevers)
|
||||
|
||||
/obj/machinery/transhuman/autoresleever
|
||||
name = "automatic resleever"
|
||||
desc = "Uses advanced technology to detect when someone needs to be resleeved, and automatically prints and sleeves them into a new body. It even generates its own biomass!"
|
||||
@@ -13,6 +15,14 @@
|
||||
var/spawn_slots = -1 //How many people can be spawned from this? If -1 it's unlimited
|
||||
var/spawntype //The kind of mob that will be spawned, if set.
|
||||
|
||||
/obj/machinery/transhuman/autoresleever/Initialize(mapload)
|
||||
. = ..()
|
||||
GLOB.active_autoresleevers += src
|
||||
|
||||
/obj/machinery/transhuman/autoresleever/Destroy()
|
||||
. = ..()
|
||||
GLOB.active_autoresleevers -= src
|
||||
|
||||
/obj/machinery/transhuman/autoresleever/update_icon()
|
||||
. = ..()
|
||||
if(stat & (BROKEN | MAINT | EMPED))
|
||||
|
||||
|
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 5.3 KiB |
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 883 B |
@@ -104,6 +104,8 @@
|
||||
#define Z_NAME_REDGATE_JUNGLE_CAVE "Redgate - Jungle Underground"
|
||||
#define Z_NAME_REDGATE_JUNGLE "Redgate - Jungle"
|
||||
#define Z_NAME_REDGATE_FACILITY "Redgate - Facility"
|
||||
#define Z_NAME_REDGATE_CASINO_CANAL "Redgate - Casino Canal"
|
||||
#define Z_NAME_REDGATE_CASINO_CANAL_LOWER "Redgate - Casino Canal Lower Level"
|
||||
|
||||
/obj/effect/landmark/map_data/groundbase
|
||||
height = 3
|
||||
|
||||
@@ -201,6 +201,7 @@
|
||||
list(Z_NAME_REDGATE_CASCADING_FALLS),
|
||||
list(Z_NAME_REDGATE_JUNGLE_CAVE, Z_NAME_REDGATE_JUNGLE),
|
||||
list(Z_NAME_REDGATE_FACILITY),
|
||||
list(Z_NAME_REDGATE_CASINO_CANAL_LOWER, Z_NAME_REDGATE_CASINO_CANAL),
|
||||
)
|
||||
|
||||
lateload_gb_north = list(
|
||||
|
||||
@@ -241,6 +241,8 @@
|
||||
#ifdef AWAY_MISSION_TEST
|
||||
#include "../redgate/falls/falls.dmm"
|
||||
#include "../redgate/abandonedisland.dmm"
|
||||
#include "../redgate/casino_canal/casino_canal_1.dmm"
|
||||
#include "../redgate/casino_canal/casino_canal_2.dmm"
|
||||
#include "../redgate/cybercity.dmm"
|
||||
#include "../redgate/darkadventure.dmm"
|
||||
#include "../redgate/eggnogtown.dmm"
|
||||
@@ -289,6 +291,11 @@
|
||||
desc = "Caves and grass and a tavern, woah!"
|
||||
mappath = "maps/redgate/innland.dmm"
|
||||
|
||||
/datum/map_template/common_lateload/redgate/casino_canal
|
||||
name = Z_NAME_REDGATE_ABANDONED_ISLAND
|
||||
desc = "It seems like it used to be people here!"
|
||||
mappath = "maps/redgate/casino_canal/casino_canal.dmm"
|
||||
|
||||
/datum/map_template/common_lateload/redgate/abandonedisland
|
||||
name = Z_NAME_REDGATE_ABANDONED_ISLAND
|
||||
desc = "It seems like it used to be people here!"
|
||||
@@ -392,6 +399,19 @@
|
||||
desc = "A facility full of unusual experiments."
|
||||
mappath = "maps/redgate/facility.dmm"
|
||||
|
||||
/datum/map_template/common_lateload/redgate/casino_canal
|
||||
name = Z_NAME_REDGATE_CASINO_CANAL
|
||||
desc = "An underwater casino at the bottom of the sea."
|
||||
mappath = "maps/redgate/casino_canal/casino_canal_2.dmm"
|
||||
|
||||
/datum/map_template/common_lateload/redgate/casino_canal_lower
|
||||
name = Z_NAME_REDGATE_CASINO_CANAL_LOWER
|
||||
desc = "The lower floor of an underwater casino at the bottom of the sea."
|
||||
mappath = "maps/redgate/casino_canal/casino_canal_1.dmm"
|
||||
|
||||
/obj/effect/landmark/map_data/underwater_casino
|
||||
height = 2
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
// Admin-use z-levels for loading whenever an admin feels like
|
||||
#ifdef AWAY_MISSION_TEST
|
||||
|
||||
324
maps/redgate/casino_canal/casino_canal.dm
Normal file
@@ -0,0 +1,324 @@
|
||||
#define UNDERWATER_CASINO_NAME "Casino Canal"
|
||||
|
||||
// ******************************
|
||||
// ***** OBJECTS ******
|
||||
// ******************************
|
||||
|
||||
// Different type of chip machine that gives visitors a set amount of chips to start with.
|
||||
// No pay-to-win here - One free use per ckey, and that's it!
|
||||
/obj/machinery/oneuse_chipmachine
|
||||
name = "automated chip dispenser"
|
||||
desc = "A curious device that dispenses a set amount of chips to each visitor one time, and one time only."
|
||||
icon = 'icons/obj/casino.dmi'
|
||||
icon_state = "chipmachine"
|
||||
anchored = 1
|
||||
var/list/used_ckeys = list() // Players who have already received their chips.
|
||||
var/amt_chips_to_dispense = 250
|
||||
var/speaking = FALSE // Whether or not we are saying one message (to prevent overlap)
|
||||
|
||||
/obj/machinery/oneuse_chipmachine/proc/state_message(var/message, var/delay=0)
|
||||
PROTECTED_PROC(TRUE)
|
||||
SHOULD_NOT_SLEEP(TRUE)
|
||||
// If we don't want a delay, say the message
|
||||
if(!delay)
|
||||
speaking = FALSE
|
||||
playsound(loc, 'sound/voice/emotes/wawa.ogg', 50, 1)
|
||||
audible_message("[icon2html(src,hearers(src))] [span_bold("\The [src]")] states, \"[message]\"", runemessage = "wawa")
|
||||
// If we do, call the delay-less part of this but with, well, the delay
|
||||
else
|
||||
speaking = TRUE
|
||||
addtimer(CALLBACK(src, PROC_REF(state_message), message), delay, TIMER_DELETE_ME)
|
||||
|
||||
|
||||
/obj/machinery/oneuse_chipmachine/attackby(obj/item/W, mob/user, attack_modifier, click_parameters)
|
||||
if(!speaking)
|
||||
// No pay-to-win!
|
||||
if(istype(W,/obj/item/spacecash))
|
||||
state_message("Our apologies, but the [UNDERWATER_CASINO_NAME] does not accept payments of any kind. We ask only for your enjoyment of our games and facilities.")
|
||||
state_message("Instead, please extend an empty hand before this machine. If this is your first time using this machine this shift, we will provide you with a set of starting chips.", 3 SECONDS)
|
||||
if(istype(W,/obj/item/spacecasinocash))
|
||||
state_message("Our apologies, but the [UNDERWATER_CASINO_NAME] does not convert chips to money.")
|
||||
state_message("We do not require money to run our facilities. By that same token, you do not need money to enjoy them.", 3 SECONDS)
|
||||
|
||||
/obj/machinery/oneuse_chipmachine/attack_hand(mob/user)
|
||||
if(user.ckey in used_ckeys)
|
||||
if(!speaking)
|
||||
state_message("You have already received your chips for this shift.")
|
||||
state_message("The [UNDERWATER_CASINO_NAME] allows only [amt_chips_to_dispense] chips to be given per visitor, regardless of financial status.", 3 SECONDS)
|
||||
else
|
||||
spawn_casinochips(amt_chips_to_dispense, src.loc, user)
|
||||
playsound(loc, 'sound/items/vending.ogg', 50, 1)
|
||||
state_message("Thank you for visiting the [UNDERWATER_CASINO_NAME]. Please accept these complementary chips and enjoy your stay.", 1 SECONDS)
|
||||
used_ckeys += user.ckey
|
||||
|
||||
// ******************************
|
||||
// ***** AREAS ******
|
||||
// ******************************
|
||||
|
||||
/area/redgate/underwater_casino
|
||||
name = UNDERWATER_CASINO_NAME
|
||||
dynamic_lighting = TRUE
|
||||
flags = RAD_SHIELDED
|
||||
base_turf = /turf/simulated/floor/water/underwater
|
||||
|
||||
/area/redgate/underwater_casino/indoors
|
||||
name = UNDERWATER_CASINO_NAME + " Interior"
|
||||
requires_power = FALSE
|
||||
|
||||
// Upper floors
|
||||
|
||||
/area/redgate/underwater_casino/indoors/upper
|
||||
name = UNDERWATER_CASINO_NAME + " - Top Floor"
|
||||
icon_state = "deck2"
|
||||
base_turf = /turf/simulated/open
|
||||
|
||||
/area/redgate/underwater_casino/indoors/upper/hall
|
||||
name = UNDERWATER_CASINO_NAME + " - Halls (Top Floor)"
|
||||
ambience = AMBIENCE_CASINO
|
||||
|
||||
/area/redgate/underwater_casino/indoors/upper/maintenance
|
||||
name = UNDERWATER_CASINO_NAME + " - Maintenance (Top Floor)"
|
||||
icon_state = "deckmaint2"
|
||||
sound_env = TUNNEL_ENCLOSED
|
||||
|
||||
/area/redgate/underwater_casino/indoors/upper/bar
|
||||
name = UNDERWATER_CASINO_NAME + " - Bar"
|
||||
icon = 'icons/turf/areas.dmi'
|
||||
icon_state = "bar"
|
||||
sound_env = LARGE_ENCLOSED
|
||||
|
||||
/area/redgate/underwater_casino/indoors/upper/lounge
|
||||
name = UNDERWATER_CASINO_NAME + " - Lounge"
|
||||
icon_state = "grewhicir"
|
||||
sound_env = SMALL_SOFTFLOOR
|
||||
|
||||
/area/redgate/underwater_casino/indoors/upper/kitchen
|
||||
name = UNDERWATER_CASINO_NAME + " - Kitchen"
|
||||
icon = 'icons/turf/areas.dmi'
|
||||
icon_state = "kitchen"
|
||||
|
||||
/area/redgate/underwater_casino/indoors/upper/entry
|
||||
name = UNDERWATER_CASINO_NAME + " - Entry"
|
||||
icon_state = "redwhitri"
|
||||
|
||||
/area/redgate/underwater_casino/indoors/upper/shop
|
||||
name = UNDERWATER_CASINO_NAME + " - Shop"
|
||||
icon_state = "bluwhisqu"
|
||||
|
||||
/area/redgate/underwater_casino/indoors/upper/janitorcloset
|
||||
name = UNDERWATER_CASINO_NAME + " - Janitorial Supply Closet"
|
||||
icon_state = "bluwhitri"
|
||||
|
||||
/area/redgate/underwater_casino/indoors/upper/bathroom
|
||||
name = UNDERWATER_CASINO_NAME + " - Bathroom"
|
||||
sound_env = SOUND_ENVIRONMENT_BATHROOM
|
||||
icon = 'icons/turf/areas.dmi'
|
||||
icon_state = "toilet"
|
||||
|
||||
/area/redgate/underwater_casino/indoors/upper/comms
|
||||
name = UNDERWATER_CASINO_NAME + " - Communications"
|
||||
icon_state = "yellow"
|
||||
|
||||
/area/redgate/underwater_casino/indoors/upper/vacant
|
||||
name = UNDERWATER_CASINO_NAME + " - Vacant Site"
|
||||
icon = 'icons/turf/areas.dmi'
|
||||
icon_state = "vacant_site"
|
||||
|
||||
/area/redgate/underwater_casino/indoors/upper/barback
|
||||
name = UNDERWATER_CASINO_NAME + " - Bar Vacant Site (Top Floor)"
|
||||
icon = 'icons/turf/areas.dmi'
|
||||
icon_state = "vacant_site"
|
||||
|
||||
/area/redgate/underwater_casino/indoors/upper/airlock
|
||||
name = UNDERWATER_CASINO_NAME + " - Airlock"
|
||||
icon = 'icons/turf/areas.dmi'
|
||||
icon_state = "green"
|
||||
|
||||
/area/redgate/underwater_casino/indoors/upper/airlock/west
|
||||
name = UNDERWATER_CASINO_NAME + " - Airlock (West)"
|
||||
|
||||
/area/redgate/underwater_casino/indoors/upper/airlock/east
|
||||
name = UNDERWATER_CASINO_NAME + " - Airlock (East)"
|
||||
|
||||
/area/redgate/underwater_casino/indoors/upper/airlock/south
|
||||
name = UNDERWATER_CASINO_NAME + " - Airlock (South)"
|
||||
|
||||
/area/redgate/underwater_casino/indoors/upper/casino
|
||||
name = UNDERWATER_CASINO_NAME + " - Game Floor"
|
||||
icon = 'icons/turf/areas.dmi'
|
||||
icon_state = "casino"
|
||||
ambience = AMBIENCE_CASINO
|
||||
|
||||
/area/redgate/underwater_casino/indoors/upper/casino/back
|
||||
name = UNDERWATER_CASINO_NAME + " - Game Floor (Back Room)"
|
||||
icon_state = "casino2"
|
||||
|
||||
/area/redgate/underwater_casino/indoors/upper/casino/slots
|
||||
name = UNDERWATER_CASINO_NAME + " - Game Floor (Slot Machines)"
|
||||
icon_state = "casino2"
|
||||
|
||||
/area/redgate/underwater_casino/indoors/upper/security
|
||||
name = UNDERWATER_CASINO_NAME + " - Security (Top Floor)"
|
||||
icon = 'icons/turf/areas_vr.dmi'
|
||||
icon_state = "security"
|
||||
|
||||
/area/redgate/underwater_casino/indoors/upper/security
|
||||
name = UNDERWATER_CASINO_NAME + " - Security Meeting Room"
|
||||
|
||||
// Lower floors
|
||||
|
||||
/area/redgate/underwater_casino/indoors/lower
|
||||
name = UNDERWATER_CASINO_NAME + " - Bottom Floor"
|
||||
icon_state = "deck1"
|
||||
base_turf = /turf/simulated/mineral/floor
|
||||
|
||||
/area/redgate/underwater_casino/indoors/lower/hall
|
||||
name = UNDERWATER_CASINO_NAME + " - Halls (Bottom Floor)"
|
||||
ambience = AMBIENCE_CASINO
|
||||
|
||||
/area/redgate/underwater_casino/indoors/lower/maintenance
|
||||
name = UNDERWATER_CASINO_NAME + " - Maintenance (Bottom Floor)"
|
||||
sound_env = TUNNEL_ENCLOSED
|
||||
icon_state = "deckmaint1"
|
||||
|
||||
/area/redgate/underwater_casino/indoors/lower/barback
|
||||
name = UNDERWATER_CASINO_NAME + " - Bar Vacant Site (Bottom Floor)"
|
||||
icon = 'icons/turf/areas.dmi'
|
||||
icon_state = "vacant_site"
|
||||
|
||||
/area/redgate/underwater_casino/indoors/lower/autoresleeving
|
||||
name = UNDERWATER_CASINO_NAME + " - Auto Resleeving"
|
||||
icon_state = "medical"
|
||||
|
||||
/area/redgate/underwater_casino/indoors/lower/resleeving
|
||||
name = UNDERWATER_CASINO_NAME + " - Resleeving"
|
||||
icon_state = "medical"
|
||||
|
||||
/area/redgate/underwater_casino/indoors/lower/laundry
|
||||
name = UNDERWATER_CASINO_NAME + " - Laundry"
|
||||
icon = 'icons/turf/areas.dmi'
|
||||
icon_state = "laundry"
|
||||
|
||||
/area/redgate/underwater_casino/indoors/lower/dorms
|
||||
name = UNDERWATER_CASINO_NAME + " - Dorms"
|
||||
flags = RAD_SHIELDED | BLUE_SHIELDED | AREA_FLAG_IS_NOT_PERSISTENT | AREA_FORBID_EVENTS | AREA_FORBID_SINGULO | AREA_SOUNDPROOF | AREA_ALLOW_LARGE_SIZE | AREA_BLOCK_SUIT_SENSORS | AREA_BLOCK_TRACKING | AREA_BLOCK_INSTANT_BUILDING
|
||||
|
||||
/area/redgate/underwater_casino/indoors/lower/dorms/dorm1
|
||||
name = UNDERWATER_CASINO_NAME + " - Dormitory One"
|
||||
icon_state = "dorm1"
|
||||
|
||||
/area/redgate/underwater_casino/indoors/lower/dorms/dorm2
|
||||
name = UNDERWATER_CASINO_NAME + " - Dormitory Two"
|
||||
icon_state = "dorm2"
|
||||
|
||||
/area/redgate/underwater_casino/indoors/lower/dorms/dorm3
|
||||
name = UNDERWATER_CASINO_NAME + " - Dormitory Three"
|
||||
icon_state = "dorm3"
|
||||
|
||||
/area/redgate/underwater_casino/indoors/lower/dorms/dorm4
|
||||
name = UNDERWATER_CASINO_NAME + " - Dormitory Four"
|
||||
icon_state = "dorm3"
|
||||
|
||||
/area/redgate/underwater_casino/indoors/lower/dorms/vip
|
||||
name = UNDERWATER_CASINO_NAME + " - VIP Suite"
|
||||
icon = 'icons/turf/areas.dmi'
|
||||
icon_state = "Sleep"
|
||||
|
||||
/area/redgate/underwater_casino/indoors/lower/dorms/vip/kitchen
|
||||
name = UNDERWATER_CASINO_NAME + " - VIP Suite Kitchen"
|
||||
icon_state = "kitchen"
|
||||
|
||||
/area/redgate/underwater_casino/indoors/lower/dorms/vip/bath
|
||||
name = UNDERWATER_CASINO_NAME + " - VIP Suite Bathroom"
|
||||
icon_state = "toilet"
|
||||
|
||||
/area/redgate/underwater_casino/indoors/lower/dorms/vip/bedroom
|
||||
name = UNDERWATER_CASINO_NAME + " - VIP Suite Bedroom"
|
||||
|
||||
/area/redgate/underwater_casino/indoors/lower/dorms/secret
|
||||
name = UNDERWATER_CASINO_NAME + " - The Back Dorm"
|
||||
icon = 'icons/turf/areas.dmi'
|
||||
icon_state = "Sleep"
|
||||
|
||||
/area/redgate/underwater_casino/indoors/lower/dorms/privategameroom1
|
||||
name = UNDERWATER_CASINO_NAME + " - Private Game Room One"
|
||||
icon = 'icons/turf/areas.dmi'
|
||||
icon_state = "casino"
|
||||
|
||||
/area/redgate/underwater_casino/indoors/lower/dorms/privategameroom2
|
||||
name = UNDERWATER_CASINO_NAME + " - Private Game Room Two"
|
||||
icon = 'icons/turf/areas.dmi'
|
||||
icon_state = "casino2"
|
||||
|
||||
/area/redgate/underwater_casino/indoors/lower/arcade
|
||||
name = UNDERWATER_CASINO_NAME + " - Arcade"
|
||||
icon = 'icons/turf/areas.dmi'
|
||||
icon_state = "arcade"
|
||||
|
||||
/area/redgate/underwater_casino/indoors/lower/boxing
|
||||
name = UNDERWATER_CASINO_NAME + " - The Ring"
|
||||
icon_state = "red"
|
||||
|
||||
/area/redgate/underwater_casino/indoors/lower/security
|
||||
name = UNDERWATER_CASINO_NAME + " - Security (Bottom Floor)"
|
||||
icon = 'icons/turf/areas_vr.dmi'
|
||||
icon_state = "security"
|
||||
|
||||
/area/redgate/underwater_casino/indoors/lower/security/armory
|
||||
name = UNDERWATER_CASINO_NAME + " - Armory"
|
||||
icon_state = "armory"
|
||||
|
||||
// Misc. areas (caves, secret buildings etc)
|
||||
/area/redgate/underwater_casino/indoors/upper/secret
|
||||
name = UNDERWATER_CASINO_NAME + " - ??? (Top Floor)"
|
||||
|
||||
/area/redgate/underwater_casino/indoors/lower/secret
|
||||
name = UNDERWATER_CASINO_NAME + " - ??? (Bottom Floor)"
|
||||
|
||||
/area/redgate/underwater_casino/indoors/upper/secret/researchbase
|
||||
name = UNDERWATER_CASINO_NAME + " - Secret Research Base"
|
||||
icon = 'icons/turf/areas.dmi'
|
||||
icon_state = "purple"
|
||||
|
||||
/area/redgate/underwater_casino/indoors/upper/secret/cave
|
||||
name = UNDERWATER_CASINO_NAME + " - Cave (Top Floor)"
|
||||
sound_env = SOUND_ENVIRONMENT_CAVE
|
||||
|
||||
/area/redgate/underwater_casino/indoors/lower/secret/cave
|
||||
name = UNDERWATER_CASINO_NAME + " - Cave (Bottom Floor)"
|
||||
sound_env = SOUND_ENVIRONMENT_CAVE
|
||||
|
||||
/area/redgate/underwater_casino/indoors/upper/secret/piratebase
|
||||
name = UNDERWATER_CASINO_NAME + " - Pirate Base (Top Floor)"
|
||||
icon = 'icons/turf/areas.dmi'
|
||||
icon_state = "red"
|
||||
|
||||
/area/redgate/underwater_casino/indoors/lower/secret/piratebase
|
||||
name = UNDERWATER_CASINO_NAME + " - Pirate Base (Bottom Floor)"
|
||||
icon = 'icons/turf/areas.dmi'
|
||||
icon_state = "red"
|
||||
|
||||
/area/redgate/underwater_casino/indoors/upper/secret/piratebasetunnel
|
||||
name = UNDERWATER_CASINO_NAME + " - Secret Tunnel (Top Floor)"
|
||||
icon = 'icons/turf/areas.dmi'
|
||||
icon_state = "red"
|
||||
sound_env = TUNNEL_ENCLOSED
|
||||
|
||||
/area/redgate/underwater_casino/indoors/lower/secret/piratebasetunnel
|
||||
name = UNDERWATER_CASINO_NAME + " - Secret Tunnel (Bottom Floor)"
|
||||
icon = 'icons/turf/areas.dmi'
|
||||
icon_state = "red"
|
||||
sound_env = TUNNEL_ENCLOSED
|
||||
|
||||
/area/redgate/underwater_casino/indoors/upper/secret/biodome
|
||||
name = UNDERWATER_CASINO_NAME + " - Biodome"
|
||||
icon = 'icons/turf/areas.dmi'
|
||||
icon_state = "green"
|
||||
sound_env = SMALL_ENCLOSED
|
||||
|
||||
// Outdoors areas
|
||||
|
||||
/area/redgate/underwater_casino/outdoors
|
||||
name = UNDERWATER_CASINO_NAME + " Exterior"
|
||||
icon_state = "blublacir"
|
||||
sound_env = SOUND_ENVIRONMENT_UNDERWATER
|
||||
26803
maps/redgate/casino_canal/casino_canal_1.dmm
Normal file
26315
maps/redgate/casino_canal/casino_canal_2.dmm
Normal file
18
maps/redgate/casino_canal/casino_canal_floodecals.dm
Normal file
@@ -0,0 +1,18 @@
|
||||
#define PURPLE_DECAL_CREATE(x) x/purple/color=COLOR_PURPLE_GRAY
|
||||
|
||||
PURPLE_DECAL_CREATE(/obj/effect/floor_decal/steeldecal/steel_decals1)
|
||||
PURPLE_DECAL_CREATE(/obj/effect/floor_decal/steeldecal/steel_decals2)
|
||||
PURPLE_DECAL_CREATE(/obj/effect/floor_decal/steeldecal/steel_decals3)
|
||||
PURPLE_DECAL_CREATE(/obj/effect/floor_decal/steeldecal/steel_decals4)
|
||||
PURPLE_DECAL_CREATE(/obj/effect/floor_decal/steeldecal/steel_decals5)
|
||||
PURPLE_DECAL_CREATE(/obj/effect/floor_decal/steeldecal/steel_decals6)
|
||||
PURPLE_DECAL_CREATE(/obj/effect/floor_decal/steeldecal/steel_decals7)
|
||||
PURPLE_DECAL_CREATE(/obj/effect/floor_decal/steeldecal/steel_decals8)
|
||||
PURPLE_DECAL_CREATE(/obj/effect/floor_decal/steeldecal/steel_decals9)
|
||||
PURPLE_DECAL_CREATE(/obj/effect/floor_decal/borderfloor)
|
||||
PURPLE_DECAL_CREATE(/obj/effect/floor_decal/borderfloor/cee)
|
||||
PURPLE_DECAL_CREATE(/obj/effect/floor_decal/borderfloor/corner)
|
||||
PURPLE_DECAL_CREATE(/obj/effect/floor_decal/borderfloor/corner2)
|
||||
PURPLE_DECAL_CREATE(/obj/effect/floor_decal/borderfloor/shifted)
|
||||
|
||||
#undef PURPLE_DECAL_CREATE
|
||||
@@ -161,6 +161,7 @@
|
||||
list(Z_NAME_REDGATE_CASCADING_FALLS),
|
||||
list(Z_NAME_REDGATE_JUNGLE_CAVE, Z_NAME_REDGATE_JUNGLE),
|
||||
list(Z_NAME_REDGATE_FACILITY),
|
||||
list(Z_NAME_REDGATE_CASINO_CANAL_LOWER, Z_NAME_REDGATE_CASINO_CANAL),
|
||||
)
|
||||
|
||||
ai_shell_restricted = TRUE
|
||||
|
||||
@@ -182,6 +182,7 @@
|
||||
list(Z_NAME_REDGATE_CASCADING_FALLS),
|
||||
list(Z_NAME_REDGATE_JUNGLE_CAVE, Z_NAME_REDGATE_JUNGLE),
|
||||
list(Z_NAME_REDGATE_FACILITY),
|
||||
list(Z_NAME_REDGATE_CASINO_CANAL_LOWER, Z_NAME_REDGATE_CASINO_CANAL),
|
||||
)
|
||||
|
||||
ai_shell_restricted = TRUE
|
||||
|
||||
@@ -2340,6 +2340,7 @@
|
||||
#include "code\modules\casino\boxes_casino.dm"
|
||||
#include "code\modules\casino\casino.dm"
|
||||
#include "code\modules\casino\casino_book.dm"
|
||||
#include "code\modules\casino\casino_cards.dm"
|
||||
#include "code\modules\casino\casino_prize_vendor.dm"
|
||||
#include "code\modules\casino\headset_casino.dm"
|
||||
#include "code\modules\casino\premium_vendors.dm"
|
||||
@@ -2929,7 +2930,6 @@
|
||||
#include "code\modules\games\cah_white_cards.dm"
|
||||
#include "code\modules\games\cardemon.dm"
|
||||
#include "code\modules\games\cards.dm"
|
||||
#include "code\modules\games\cards_ch.dm"
|
||||
#include "code\modules\games\dice.dm"
|
||||
#include "code\modules\games\egy_cards_vr.dm"
|
||||
#include "code\modules\games\schnapsen_vr.dm"
|
||||
@@ -4998,6 +4998,8 @@
|
||||
#include "maps\offmap_vr\common_offmaps.dm"
|
||||
#include "maps\redgate\facility_items.dm"
|
||||
#include "maps\redgate\fantasy_items.dm"
|
||||
#include "maps\redgate\casino_canal\casino_canal.dm"
|
||||
#include "maps\redgate\casino_canal\casino_canal_floodecals.dm"
|
||||
#include "maps\redgate\falls\atoll_decals.dm"
|
||||
#include "maps\redgate\falls\atoll_objs.dm"
|
||||
#include "maps\redgate\falls\atoll_turfs.dm"
|
||||
|
||||