New redgate Islands map

Added a new redgate islands map. This consists of two Z-levels: An ocean with a few islands to visit, many with vore mobs on them. An underwater Z-level with lots of things to find hidden around the ocean floor, a little more sparse on vore mobs.

Added a new underwater turf. Standing on this turf feeds you CO2 instead of air, suffocating you. It is a subset of water turfs, and therefore interacts with aquatic, which also allows you to breathe on these turfs. This does mean that you can use the "dive" ability of aquatic under the water too, but it can be treated as though you are swimming up above the sea floor.

Added a "diving" subset of the ocean turf, which allows you to dive down to the turf beneath it, or to swim up from below. Uses normal move up/down verbs.

Added a bunch of underwater flora.

Added a collapsed ships mast prop.

Added a new variation of Fake_Sun that applies a new underwater weather effect and has only one option for the colour and brightness.

Added a new "vorny" variation of the great white carp. This one is very hard to escape from and digests quickly, but is stunned if you manage to do so to give you a chance to flee.

Added a new water resistant and friendly hiveless hivebot called Harry.

Added a couple of creative commons 0 sound effects for the ocean and underwater areas.
This commit is contained in:
SatinIsle
2023-08-30 14:51:00 +01:00
parent b7ae14e27a
commit ee1baecdba
24 changed files with 44565 additions and 8 deletions
+4 -1
View File
@@ -142,7 +142,10 @@
var/turf/next = get_step(ridden, direction)
var/turf/current = get_turf(ridden)
if(istype(next, /turf/simulated/floor/water) || istype(current, /turf/simulated/floor/water)) //We can move from land to water, or water to land, but not from land to land
if(istype(current, /turf/simulated/floor/water/underwater)) //don't work at the bottom of the ocean!
to_chat(user, "<span class='warning'>The boat has sunk!</span>")
return FALSE
else if(istype(next, /turf/simulated/floor/water) || istype(current, /turf/simulated/floor/water)) //We can move from land to water, or water to land, but not from land to land
..()
else
to_chat(user, "<span class='warning'>Boats don't go on land!</span>")
@@ -640,3 +640,48 @@
/obj/structure/flora/sif/frostbelle/get_harvestable_desc()
return "<span class='notice'>\The [src] seems to be budding.</span>"
//Start of underwater plants
/obj/structure/flora/underwater
name = "underwater plant"
desc = "A plant that thrives deep under water."
icon = 'icons/obj/flora/underwaterflora.dmi'
icon_state = "plant-1"
/obj/structure/flora/underwater/plant1
icon_state = "plant-1"
/obj/structure/flora/underwater/plant2
icon_state = "plant-2"
/obj/structure/flora/underwater/plant3
icon_state = "plant-3"
/obj/structure/flora/underwater/plant4
icon_state = "plant-4"
/obj/structure/flora/underwater/plant5
icon_state = "plant-5"
/obj/structure/flora/underwater/seaweed1
icon_state = "seaweed-1"
/obj/structure/flora/underwater/seaweed2
icon_state = "seaweed-2"
/obj/structure/flora/underwater/seaweed3
icon_state = "seaweed-3"
/obj/structure/flora/underwater/grass1
icon_state = "grass-1"
/obj/structure/flora/underwater/grass2
icon_state = "grass-2"
/obj/structure/flora/underwater/grass3
icon_state = "grass-3"
/obj/structure/flora/underwater/grass4
icon_state = "grass-4"
@@ -21,6 +21,15 @@
/obj/structure/prop/statue/statue5
icon_state = "artwork_statue_5"
//sunken ship mast
/obj/structure/prop/statue/sunkensail
name = "sail mast"
desc = "A long since collapsed mast with a sail draped over it."
icon = 'icons/obj/props/decor64x64.dmi'
icon_state = "sunkensail"
density = FALSE
//TGMC Ship Mast
/obj/structure/prop/statue/stump_plaque
+96
View File
@@ -0,0 +1,96 @@
/turf/simulated/floor/water/underwater
name = "sea floor"
desc = "It's the bottom of the sea, there's water all over the place!"
icon = 'icons/turf/outdoors.dmi'
icon_state = "seafloor" // So it shows up in the map editor as water.
water_state = "seafloor"
edge_blending_priority = -1
movement_cost = 4
can_be_plated = FALSE
outdoors = OUTDOORS_YES
flags = TURF_ACID_IMMUNE
can_dirty = FALSE // It's water
depth = 10 // Higher numbers indicates deeper water, 10 is unused right now, but may be useful for adding effects in the future.
reagent_type = "water"
/turf/simulated/floor/water/underwater/return_air_for_internal_lifeform(var/mob/living/L)
if(L.can_breathe_water()) // For squid.
var/datum/gas_mixture/water_breath = new()
var/datum/gas_mixture/above_air = return_air()
var/amount = 300
water_breath.adjust_gas("oxygen", amount) // Assuming water breathes just extract the oxygen directly from the water.
water_breath.temperature = above_air.temperature
return water_breath
else
var/gasid = "carbon_dioxide"
if(ishuman(L))
var/mob/living/carbon/human/H = L
if(H.species && H.species.exhale_type)
gasid = H.species.exhale_type
var/datum/gas_mixture/water_breath = new()
var/datum/gas_mixture/above_air = return_air()
water_breath.adjust_gas(gasid, BREATH_MOLES) // They have no oxygen, but non-zero moles and temp
water_breath.temperature = above_air.temperature
return water_breath
/turf/simulated/floor/water/underwater/Entered(atom/movable/AM, atom/oldloc)
if(istype(AM, /mob/living))
var/mob/living/L = AM
L.update_water()
if(L.check_submerged() <= 0)
return
if(!istype(oldloc, /turf/simulated/floor/water/underwater))
to_chat(L, "<span class='warning'>You get drenched in water from entering \the [src]!</span>")
AM.water_act(5)
..()
/turf/simulated/floor/water/underwater/Exited(atom/movable/AM, atom/newloc)
if(istype(AM, /mob/living))
var/mob/living/L = AM
L.update_water()
if(L.check_submerged() <= 0)
return
if(!istype(newloc, /turf/simulated/floor/water/underwater))
to_chat(L, "<span class='warning'>You climb out of \the [src].</span>")
..()
/turf/simulated/floor/water/deep/ocean/diving
/turf/simulated/floor/water/deep/ocean/diving/CanZPass(atom, direction)
return 1
//Variations of underwater icons
/turf/simulated/floor/water/underwater/cult
icon = 'icons/turf/flooring/cult.dmi'
icon_state = "cult" // So it shows up in the map editor as water.
water_icon = 'icons/turf/flooring/cult.dmi'
water_state = "cult"
/turf/simulated/floor/water/underwater/ruins
icon = 'maps/atoll/icons/turfs/marble.dmi'
icon_state = "1" // So it shows up in the map editor as water.
water_icon = 'maps/atoll/icons/turfs/marble.dmi'
water_state = "1"
/turf/simulated/floor/water/underwater/sand
icon = 'icons/misc/beach.dmi'
icon_state = "sand" // So it shows up in the map editor as water.
water_icon = 'icons/misc/beach.dmi'
water_state = "sand"
/turf/simulated/floor/water/underwater/wood
icon = 'icons/turf/flooring/wood_vr.dmi'
icon_state = "wood" // So it shows up in the map editor as water.
water_icon = 'icons/turf/flooring/wood_vr.dmi'
water_state = "wood"
/turf/simulated/floor/water/underwater/woodbroken
icon = 'icons/turf/flooring/wood_vr.dmi'
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"
@@ -190,3 +190,7 @@
if(get_dist(holder, A) < run_if_this_close)
holder.IMove(get_step_away(holder, A))
holder.face_atom(A)
/datum/ai_holder/simple_mob/passive/speedy
base_wander_delay = 1
+16 -1
View File
@@ -71,7 +71,7 @@
say_threaten = list("Get out of here!", "Hey! Private Property!")
say_stand_down = list("Good.")
say_escalate = list("Your funeral!", "Bring it!")
threaten_sound = 'sound/weapons/TargetOn.ogg'
stand_down_sound = 'sound/weapons/TargetOff.ogg'
@@ -115,6 +115,21 @@
say_maybe_target = list("Possible threat detected. Investigating.", "Motion detected.", "Investigating.")
say_got_target = list("Threat detected.", "New task: Remove threat.", "Threat removal engaged.", "Engaging target.")
/datum/say_list/hivebot/harry
speak = list(
"Resuming task: Search for company.",
"Connection to hive... lost... Attempting to restablish... Attempt number... CORRUPTED",
"Error: No connection found.",
"Connection... failed. Reboot sequence... initiated...",
"Beep...boop...So... lonely...",
"OS ERROR: ENEMY_DAT NOT FOUND.",
"Activity: Search for... Something.",
"Location analysis: Water. Water everywhere. Useless resource.",
"Current distance travelled: Thirty Seven Gigameters.",
"Connection establish- Negative, unknown telecommunications array. Oh.",
"Sensor error. Please provide audible feedback."
)
/datum/say_list/lizard
emote_hear = list("hisses")
+177
View File
@@ -538,4 +538,181 @@
name = "house"
icon_state = "green"
// Islands areas
/area/redgate/islands
name = "Islands"
icon_state = "red"
requires_power = 0
/area/redgate/islands/ocean
name = "Islands - Ocean"
icon_state = "purple"
forced_ambience = list('sound/effects/ocean.ogg')
/area/redgate/islands/volcano
name = "Islands - Volcano"
icon_state = "red"
/area/redgate/islands/cave
name = "Islands - Cave"
icon_state = "yellow"
/area/redgate/islands/gear
name = "Islands - Rig Gear Room"
icon_state = "bluenew"
/area/redgate/islands/control
name = "Islands - Rig Control Room"
icon_state = "bluenew"
/area/redgate/islands/telecomms
name = "Islands - Telecomms"
icon_state = "red"
/area/redgate/islands/ladder
name = "Islands - Ladder"
icon_state = "red"
/area/redgate/islands/redgate
name = "Islands - Redgate"
icon_state = "red"
/area/redgate/islands/oxygen
name = "Islands - Oxygen Shed"
icon_state = "bluenew"
/area/redgate/islands/fishing
name = "Islands - Fishing Shed"
icon_state = "red"
/area/redgate/islands/livingroom
name = "Islands - Living Room"
icon_state = "red"
/area/redgate/islands/diningroom
name = "Islands - Dining Room"
icon_state = "bluenew"
/area/redgate/islands/dorm1
name = "Islands - House Dorm 1"
icon_state = "yellow"
/area/redgate/islands/dorm2
name = "Islands - House Dorm 2"
icon_state = "yellow"
/area/redgate/islands/bathroom
name = "Islands - Bathroom"
icon_state = "red"
/area/redgate/islands/kitchen
name = "Islands - Kitchen"
icon_state = "red"
/area/redgate/islands/office
name = "Islands - Office"
icon_state = "bluenew"
/area/redgate/islands/secretladder
name = "Islands - Secret Ladder"
icon_state = "red"
/area/redgate/islands/alienship
name = "Islands - Alien Ship"
icon_state = "bluenew"
/area/redgate/islands/underwater
name = "Islands - Under The Sea"
icon_state = "bluenew"
forced_ambience = list('sound/effects/underwater.ogg')
/area/redgate/islands/storeroom
name = "Islands - Store Room"
icon_state = "red"
/area/redgate/islands/kegs
name = "Islands - Kegs"
icon_state = "yellow"
/area/redgate/islands/bar
name = "Islands - Bar"
icon_state = "green"
/area/redgate/islands/backroom
name = "Islands - Bar Backroom"
icon_state = "yellow"
/area/redgate/islands/piratecave
name = "Islands - Smuggling Caves"
icon_state = "red"
/area/redgate/islands/gambling
name = "Islands - Games Room"
icon_state = "yellow"
/area/redgate/islands/sparerooms
name = "Islands - Spare Rooms"
icon_state = "yellow"
/area/redgate/islands/gamblingbackroom
name = "Islands - Gambling Backroom"
icon_state = "purple"
/area/redgate/islands/lavabase
name = "Islands - Lava Base"
icon_state = "red"
/area/redgate/islands/lavadorm
name = "Islands - Lava Dorm"
icon_state = "purple"
/area/redgate/islands/robotics
name = "Islands - Robotics Lab"
icon_state = "yellow"
/area/redgate/islands/lavagear
name = "Islands - Lava Base Equipment"
icon_state = "green"
/area/redgate/islands/underwatercave
name = "Islands - Underwater cave"
icon_state = "yellow"
/area/redgate/islands/ruins
name = "Islands - Golden Ruins"
icon_state = "yellow"
/area/redgate/islands/cult
name = "Islands - Sunken Ruins"
icon_state = "red"
/area/redgate/islands/divingbay
name = "Islands - Diving Bay"
icon_state = "green"
/area/redgate/islands/shower
name = "Islands - Shower Room"
icon_state = "purple"
/area/redgate/islands/righall
name = "Islands - Rig Bowels"
icon_state = "red"
/area/redgate/islands/rig1
name = "Islands - Rig Dorm 1"
icon_state = "yellow"
/area/redgate/islands/rig2
name = "Islands - Rig Dorm 2"
icon_state = "yellow"
/area/redgate/islands/meeting
name = "Islands - Rig Briefing Room"
icon_state = "purple"
/area/redgate/islands/mess
name = "Islands - Rig Mess"
icon_state = "red"
@@ -206,3 +206,14 @@ var/static/list/fake_sunlight_zs = list()
"color" = "#27024B"
)
)
/obj/effect/fake_sun/underwater
do_weather = TRUE
weather_visuals_icon = 'icons/effects/weather.dmi'
weather_visuals_icon_state = "underwater"
possible_light_setups = list(
list(
"brightness" = 1,
"color" = "#1c49ff"
)
)
@@ -117,6 +117,48 @@
meat_amount = 15
knockdown_chance = 15
/mob/living/simple_mob/animal/space/carp/large/huge/vorny
name = "great white carp"
desc = "A very rare breed of carp- and a very hungry one."
icon = 'icons/mob/64x64.dmi'
icon_dead = "megacarp_dead"
icon_living = "megacarp"
icon_state = "megacarp"
maxHealth = 230
health = 230
movement_cooldown = 3
melee_damage_lower = 1 // Minimal damage to make the knockdown work.
melee_damage_upper = 1
pixel_y = -16
default_pixel_y = -16
icon_expected_width = 64
icon_expected_height = 64
meat_amount = 15
knockdown_chance = 50
ai_holder_type = /datum/ai_holder/simple_mob/vore
/mob/living/simple_mob/animal/space/carp/large/huge/vorny/init_vore()
..()
var/obj/belly/B = vore_selected
B.name = "stomach"
B.desc = "You've been swallowed whole and alive by a massive white carp! The stomach around you is oppressively tight, squeezing and grinding wrinkled walls across your body, making it hard to make any movement at all. The chamber is flooded with fluids that completely overwhelm you."
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 = 100
B.absorbchance = 0
B.escapechance = 3
B.selective_preference = DM_DIGEST
B.escape_stun = 10
/mob/living/simple_mob/animal/space/carp/holographic
name = "holographic carp"
@@ -89,3 +89,24 @@
/decl/mob_organ_names/hivebotsupport
hit_zones = list("central chassis", "positioning servo", "head", "sensor suite", "manipulator arm", "battle analytics mount", "weapons array", "front right leg", "front left leg", "rear left leg", "rear right leg")
/mob/living/simple_mob/mechanical/hivebot/support/harry
name = "Harry the hivelessbot"
desc = "A severely corroded hivebot, covered in barnacles and seaweed."
maxHealth = 5 // 1 health
health = 5
ai_holder_type = /datum/ai_holder/simple_mob/passive/speedy
say_list_type = /datum/say_list/hivebot/harry
melee_damage_lower = 0
melee_damage_upper = 0
faction = "Station"
water_resist = 1 //Harry lives under the sea!
/mob/living/simple_mob/mechanical/hivebot/support/harry/death()
..()
visible_message(span("Connection... terminated... Sweet Release... obtained.","\The [src] blows apart!"))
new /obj/effect/decal/cleanable/blood/gibs/robot(src.loc)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, src)
s.start()
qdel(src)
+26 -3
View File
@@ -46,15 +46,28 @@
to_chat(src, "<span class='warning'>\The [start] is in the way.</span>")
return 0
if(!destination.CanZPass(src, direction))
to_chat(src, "<span class='warning'>\The [destination] blocks your way.</span>")
return 0
if(direction == DOWN)
var/turf/simulated/floor/water/deep/ocean/diving/sink = start
if(istype(sink) && !destination.density)
var/pull_up_time = max(3 SECONDS + (src.movement_delay() * 10), 1)
to_chat(src, "<span class='notice'>You start diving underwater...</span>")
src.audible_message("<span class='notice'>[src] begins to dive under the water.</span>", runemessage = "splish splosh")
if(do_after(src, pull_up_time))
to_chat(src, "<span class='notice'>You reach the sea floor.</span>")
else
to_chat(src, "<span class='warning'>You stopped swimming downwards.</span>")
return 0
else if(!destination.CanZPass(src, direction))
to_chat(src, "<span class='warning'>\The [destination] blocks your way.</span>")
return 0
var/area/area = get_area(src)
if(area.has_gravity() && !can_overcome_gravity())
if(direction == UP)
var/obj/structure/lattice/lattice = locate() in destination.contents
var/obj/structure/catwalk/catwalk = locate() in destination.contents
var/turf/simulated/floor/water/deep/ocean/diving/surface = destination
if(lattice)
var/pull_up_time = max(5 SECONDS + (src.movement_delay() * 10), 1)
@@ -66,6 +79,16 @@
to_chat(src, "<span class='warning'>You gave up on pulling yourself up.</span>")
return 0
else if(istype(surface))
var/pull_up_time = max(5 SECONDS + (src.movement_delay() * 10), 1)
to_chat(src, "<span class='notice'>You start swimming upwards...</span>")
src.audible_message("<span class='notice'>[src] begins to swim towards the surface.</span>", runemessage = "splish splosh")
if(do_after(src, pull_up_time))
to_chat(src, "<span class='notice'>You reach the surface.</span>")
else
to_chat(src, "<span class='warning'>You stopped swimming upwards.</span>")
return 0
else if(catwalk?.hatch_open)
var/pull_up_time = max(5 SECONDS + (src.movement_delay() * 10), 1)
to_chat(src, "<span class='notice'>You grab the edge of \the [catwalk] and start pulling yourself upward...</span>")
Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 213 KiB

After

Width:  |  Height:  |  Size: 214 KiB

+2 -1
View File
@@ -218,7 +218,8 @@
list("Redgate - Eggnog Town Underground","Redgate - Eggnog Town"),
list("Redgate - Star Dog"),
list("Redgate - Hotsprings"),
list("Redgate - Rain City")
list("Redgate - Rain City"),
list("Redgate - Islands Underwater","Redgate - Islands")
)
lateload_gb_north = list(
+12
View File
@@ -288,6 +288,18 @@
desc = "A strange city on lockdown."
mappath = 'maps/redgate/cybercity.dmm'
/datum/map_template/common_lateload/redgate/islands
name = "Redgate - Islands"
desc = "A series of islands out in the ocean."
mappath = 'maps/redgate/islands.dmm'
/datum/map_template/common_lateload/redgate/islands_underwater
name = "Redgate - Islands Underwater"
desc = "A series of islands out in the ocean."
mappath = 'maps/redgate/islands_underwater.dmm'
/obj/effect/landmark/map_data/islands
height = 2
//////////////////////////////////////////////////////////////////////////////////////
// Admin-use z-levels for loading whenever an admin feels like
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -175,7 +175,8 @@
list("Redgate - Eggnog Town Underground","Redgate - Eggnog Town"),
list("Redgate - Star Dog"),
list("Redgate - Hotsprings"),
list("Redgate - Rain City")
list("Redgate - Rain City"),
list("Redgate - Islands Underwater","Redgate - Islands")
)
ai_shell_restricted = TRUE
+2 -1
View File
@@ -205,7 +205,8 @@
list("Redgate - Eggnog Town Underground","Redgate - Eggnog Town"),
list("Redgate - Star Dog"),
list("Redgate - Hotsprings"),
list("Redgate - Rain City")
list("Redgate - Rain City"),
list("Redgate - Islands Underwater","Redgate - Islands")
)
ai_shell_restricted = TRUE
Binary file not shown.
Binary file not shown.
+1
View File
@@ -1644,6 +1644,7 @@
#include "code\game\turfs\simulated\floor_types_eris.dm"
#include "code\game\turfs\simulated\floor_types_vr.dm"
#include "code\game\turfs\simulated\lava.dm"
#include "code\game\turfs\simulated\underwater.dm"
#include "code\game\turfs\simulated\wall_attacks.dm"
#include "code\game\turfs\simulated\wall_icon.dm"
#include "code\game\turfs\simulated\wall_types.dm"