diff --git a/code/__DEFINES/atmospherics.dm b/code/__DEFINES/atmospherics.dm index fa2e1ff9de0a..fc720d2c96fd 100644 --- a/code/__DEFINES/atmospherics.dm +++ b/code/__DEFINES/atmospherics.dm @@ -213,15 +213,19 @@ #define ATMOS_TANK_AIRMIX "o2=2644;n2=10580;TEMP=293.15" #define ATMOS_TANK_FUEL "o2=33000;plasma=66000;TEMP=293.15" -//LAVALAND +//PLANETARY /// what pressure you have to be under to increase the effect of equipment meant for lavaland #define LAVALAND_EQUIPMENT_EFFECT_PRESSURE 90 +#define ICEMOON_DEFAULT_ATMOS "ICEMOON_ATMOS" +#define GAS_GIANT_ATMOS "GAS_GIANT_ATMOS" +#define PLASMA_GIANT_ATMOS "PLASMA_GIANT_ATMOS" +#define WASTEPLANET_DEFAULT_ATMOS "WASTEPLANET_ATMOS" +#define LAVALAND_DEFAULT_ATMOS "LAVALAND_ATMOS" //ATMOS MIX IDS -#define LAVALAND_DEFAULT_ATMOS "LAVALAND_ATMOS" -#define ICEMOON_DEFAULT_ATMOS "ICEMOON_ATMOS" -#define WASTEPLANET_DEFAULT_ATMOS "WASTEPLANET_ATMOS" + + //ATMOSIA GAS MONITOR TAGS diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm index d0c1add8f578..9b9ecd05cb91 100644 --- a/code/__DEFINES/flags.dm +++ b/code/__DEFINES/flags.dm @@ -152,6 +152,7 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define ZAP_DEFAULT_FLAGS ZAP_MACHINE_EXPLOSIVE | ZAP_ALLOW_DUPLICATES | ZAP_OBJ_DAMAGE | ZAP_MOB_DAMAGE | ZAP_MOB_STUN #define ZAP_FUSION_FLAGS ZAP_OBJ_DAMAGE | ZAP_MOB_DAMAGE | ZAP_MOB_STUN +#define ZAP_STORM_FLAGS ZAP_OBJ_DAMAGE | ZAP_MOB_DAMAGE | ZAP_MOB_STUN #define ZAP_SUPERMATTER_FLAGS ZAP_GIVES_RESEARCH #define ZAP_TESLA_FLAGS ZAP_DEFAULT_FLAGS | ZAP_GIVES_RESEARCH diff --git a/code/__DEFINES/maths.dm b/code/__DEFINES/maths.dm index ae039936ab4c..b6b75cc8d8c8 100644 --- a/code/__DEFINES/maths.dm +++ b/code/__DEFINES/maths.dm @@ -273,6 +273,8 @@ else if(dx < 0) . += 360 +//Magnitude. used for ship velocity +#define MAGNITUDE(a, b) (sqrt(a ** 2 + b ** 2)) /// Converts a probability/second chance to probability/seconds_per_tick chance /// For example, if you want an event to happen with a 10% per second chance, but your proc only runs every 5 seconds, do `if(prob(100*SPT_PROB_RATE(0.1, 5)))` @@ -282,5 +284,3 @@ /// Like SPT_PROB_RATE but easier to use, simply put `if(SPT_PROB(10, 5))` #define SPT_PROB(prob_per_second_percent, seconds_per_tick) (prob(100*SPT_PROB_RATE((prob_per_second_percent)/100, (seconds_per_tick)))) - -#define MAGNITUDE(a, b) (sqrt(a ** 2 + b ** 2)) diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 3c73c0397378..1a9a2a9d7316 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -419,6 +419,7 @@ GLOBAL_LIST_INIT(pda_styles, sortList(list(MONO, VT, ORBITRON, SHARE))) #define GAUSSIAN_BLUR(filter_size) filter(type="blur", size=filter_size) #define STANDARD_GRAVITY 1 //Anything above this is high gravity, anything below no grav +#define GAS_GIANT_GRAVITY 2 #define GRAVITY_DAMAGE_TRESHOLD 3 //Starting with this value gravity will start to damage mobs #define CAMERA_NO_GHOSTS 0 diff --git a/code/__DEFINES/overmap.dm b/code/__DEFINES/overmap.dm index 6e49e393b8d8..cb220b54672b 100644 --- a/code/__DEFINES/overmap.dm +++ b/code/__DEFINES/overmap.dm @@ -32,6 +32,8 @@ #define DYNAMIC_WORLD_REEBE "reebe" //celestial bodies #define DYNAMIC_WORLD_ASTEROID "asteroid" #define DYNAMIC_WORLD_SPACERUIN "space" +#define DYNAMIC_WORLD_GAS_GIANT "gas giant" +#define DYNAMIC_WORLD_PLASMA_GIANT "plasma giant" /// Make sure you are adding new planet types to this, in order as seen above preferrably #define DYNAMIC_WORLD_LIST_ALL list(\ @@ -44,7 +46,9 @@ DYNAMIC_WORLD_WASTEPLANET,\ DYNAMIC_WORLD_REEBE,\ DYNAMIC_WORLD_ASTEROID,\ - DYNAMIC_WORLD_SPACERUIN) + DYNAMIC_WORLD_SPACERUIN,\ + DYNAMIC_WORLD_GAS_GIANT,\ + DYNAMIC_WORLD_PLASMA_GIANT) //Possible ship states #define OVERMAP_SHIP_IDLE "idle" diff --git a/code/datums/atmosphere/planetary.dm b/code/datums/atmosphere/planetary.dm index cd5c3bfce376..85bbf13c52a9 100644 --- a/code/datums/atmosphere/planetary.dm +++ b/code/datums/atmosphere/planetary.dm @@ -53,6 +53,46 @@ minimum_temp = 180 maximum_temp = 180 +/datum/atmosphere/gas_giant + id = GAS_GIANT_ATMOS + + base_gases = list( + GAS_N2=10, + GAS_NITROUS=10, + ) + normal_gases = list( + GAS_O2=5, + GAS_H2O=7, + GAS_N2=5, + GAS_NITROUS=7, + GAS_CO2=5, + ) + restricted_gases = list( + GAS_NITROUS=7, + ) + restricted_chance = 1 + + minimum_pressure = WARNING_HIGH_PRESSURE + 175 + maximum_pressure = HAZARD_HIGH_PRESSURE + 1000 + + minimum_temp = 30 //number i pulled out of my ass + maximum_temp = 120 + +/datum/atmosphere/gas_giant/plasma + id = PLASMA_GIANT_ATMOS + + base_gases = list( + GAS_PLASMA=10, + ) + normal_gases = list( + GAS_PLASMA=10, + GAS_CO2=5, + ) + restricted_gases = list( + GAS_PLASMA=0.1, + ) + restricted_chance = 1 + /datum/atmosphere/wasteplanet id = WASTEPLANET_DEFAULT_ATMOS diff --git a/code/datums/mapgen/single_biome/Gas_Giant.dm b/code/datums/mapgen/single_biome/Gas_Giant.dm new file mode 100644 index 000000000000..ff904db06853 --- /dev/null +++ b/code/datums/mapgen/single_biome/Gas_Giant.dm @@ -0,0 +1,36 @@ +/datum/map_generator/single_biome/gas_giant + use_cellautomata = FALSE + + biome_type = /datum/biome/gas_giant + area_type = /area/overmap_encounter/planetoid/gas_giant + +/datum/biome/gas_giant + open_turf_types = list(/turf/open/chasm/gas_giant) + + flora_spawn_list = list( + ) + feature_spawn_list = null + mob_spawn_list = list( + /mob/living/simple_animal/hostile/asteroid/basilisk/watcher + //in the future, I'd like to add something like. + //The slylandro, or really any floating gas bag species, it'd be cool + ) + + +/datum/map_generator/single_biome/plasma_giant + use_cellautomata = FALSE + + biome_type = /datum/biome/plasma_giant + area_type = /area/overmap_encounter/planetoid/gas_giant + + +/datum/biome/plasma_giant + open_turf_types = list(/turf/open/chasm/gas_giant/plasma) + + flora_spawn_list = list( + ) + feature_spawn_list = null + mob_spawn_list = list( + /mob/living/simple_animal/hostile/asteroid/basilisk/watcher + + ) diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm index b898c1eded77..7e9d90bb482f 100644 --- a/code/game/gamemodes/meteor/meteors.dm +++ b/code/game/gamemodes/meteor/meteors.dm @@ -334,6 +334,29 @@ GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust)) //for space dust event if(prob(20)) explosion(src.loc,2,4,6,8) +/obj/effect/meteor/carp + name = "high velocity space carp" + desc = "What the devil?" + icon_state = "carp" + hits = 1 + hitpwr = 0 + pass_flags = PASSTABLE + meteorsound = 'sound/effects/blobattack.ogg' + meteordrop = list(/mob/living/simple_animal/hostile/carp) + dropamt = 1 + +/obj/effect/meteor/carp/big + name = "high velocity space carp" + desc = "What the devil?" + icon = 'icons/mob/broadMobs.dmi' + icon_state = "megacarp" + hits = 1 + hitpwr = 1 + pass_flags = PASSTABLE + meteordrop = list(/mob/living/simple_animal/hostile/carp/megacarp) + dropamt = 1 + + ////////////////////////// //Spookoween meteors ///////////////////////// diff --git a/code/game/objects/effects/anomalies/_anomalies.dm b/code/game/objects/effects/anomalies/_anomalies.dm index 6d1c3ad7f082..3c8340bb284b 100644 --- a/code/game/objects/effects/anomalies/_anomalies.dm +++ b/code/game/objects/effects/anomalies/_anomalies.dm @@ -146,3 +146,6 @@ . = ..() if(user.research_scanner == TRUE) to_chat(user, span_notice("If harvested, this anomaly would be worth [research_value] research points.")) + +/obj/effect/anomaly/throw_atom_into_space() + qdel(src) diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index ad355b32af3d..b07a53870730 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -1017,6 +1017,17 @@ /obj/effect/anomaly/plasmasoul/planetary, /obj/effect/anomaly/melter/planetary, ) + +/obj/effect/spawner/lootdrop/anomaly/storm + loot = list( + /obj/effect/anomaly/flux, + /obj/effect/anomaly/pyro, + /obj/effect/anomaly/sparkler, + /obj/effect/anomaly/veins, + /obj/effect/anomaly/phantom, + /obj/effect/anomaly/melter, + ) + //wasteplanet things /obj/effect/spawner/lootdrop/waste/grille_or_trash diff --git a/code/game/turfs/open/chasm.dm b/code/game/turfs/open/chasm.dm index 538a81aa26e8..96c90e4a3d64 100644 --- a/code/game/turfs/open/chasm.dm +++ b/code/game/turfs/open/chasm.dm @@ -115,3 +115,31 @@ underlay_appearance.icon = 'icons/turf/floors.dmi' underlay_appearance.icon_state = "dirt" return TRUE + +//gas giant "chasm" +/turf/open/chasm/gas_giant + name = "void" + desc = "The gas that makes up the gas giant. You can't see further, but you're fairly sure if you slipped in, you'd be dead." + icon = 'icons/turf/floors.dmi' + icon_state = "reebemap" //to-do. Don't use Rebee Sprite + layer = SPACE_LAYER + baseturfs = /turf/open/chasm/gas_giant + planetary_atmos = TRUE + initial_gas_mix = GAS_GIANT_ATMOS + color = COLOR_DARK_MODERATE_ORANGE + light_range = 2 + light_power = 0.6 + light_color = COLOR_DARK_MODERATE_ORANGE + smoothing_flags = NONE + smoothing_groups = null + canSmoothWith = null + tiled_dirt = FALSE + +/turf/open/chasm/gas_giant/Initialize(mapload, inherited_virtual_z) + . = ..() + icon_state = "reebegame" + +/turf/open/chasm/gas_giant/plasma + light_color = COLOR_PURPLE + color = COLOR_PURPLE + initial_gas_mix = PLASMA_GIANT_ATMOS diff --git a/code/game/turfs/open/space/transit.dm b/code/game/turfs/open/space/transit.dm index 629433bb81a1..bc9789cf4f3a 100644 --- a/code/game/turfs/open/space/transit.dm +++ b/code/game/turfs/open/space/transit.dm @@ -37,8 +37,8 @@ if(iseffect(src)) return if(isliving(src)) - var/mob/living/poor_soul = src // This may not seem like much, but if you toss someone out - poor_soul.apply_damage_type(50, BRUTE) // and they go through like four tiles, they're goners + var/mob/living/poor_soul = src // This may not seem like much, but if you toss someone out + poor_soul.apply_damage_type(25, BRUTE) // and they go through like four tiles, they're goners return qdel(src) diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm index c3d52a2006b4..a9292c2738ac 100644 --- a/code/modules/mob/living/simple_animal/hostile/carp.dm +++ b/code/modules/mob/living/simple_animal/hostile/carp.dm @@ -139,6 +139,9 @@ add_dead_carp_overlay() ..() +/mob/living/simple_animal/hostile/carp/throw_atom_into_space() + return + /mob/living/simple_animal/hostile/carp/tamed() . = ..() can_buckle = TRUE diff --git a/code/modules/overmap/missions/acquire_mission.dm b/code/modules/overmap/missions/acquire_mission.dm index 57b37512214c..6ae295213496 100644 --- a/code/modules/overmap/missions/acquire_mission.dm +++ b/code/modules/overmap/missions/acquire_mission.dm @@ -107,6 +107,39 @@ weight = 1 objective_type = /obj/item/strange_crystal +/* +Acquire: Anomaly +*/ + +/datum/mission/acquire/anomaly + name = "Anomaly core requested" + weight = 8 + value = 3000 + duration = 40 MINUTES + dur_mod_range = 0.2 + container_type = /obj/item/storage/box/anomaly + objective_type = /obj/item/assembly/signaler/anomaly + num_wanted = 1 + +/datum/mission/acquire/anomaly/New(...) + var/group = pick(list( + "Cybersun Industries", + "CMM-GOLD", + "Nanotrasen Anomalous Studies Division", + "The Naturalienwissenschaftlicher Studentenverbindungs-Verband", + "The Central Solarian Anomaly Research Agency", + "DeForest Medical R&D", + "A strange lizard on the outpost" + )) + + desc = "[group] has requested that a ship [pick(list("procure", "grab", "acquire", "find", "locate"))] \ + an anomaly core for [pick(list("research", "analysis", "technical development", "closer inspection", "some reason"))]. \ + They've offered to pay well, so we're relaying this mission to you" + . = ..() + + + + /* Acquire: The Creature */ @@ -184,7 +217,7 @@ /datum/mission/acquire/aquarium name = "Fish needed for my aquarium" - weight = 14 + weight = 6 value = 750 duration = 60 MINUTES val_mod_range = 0.2 @@ -210,7 +243,7 @@ /datum/mission/acquire/aquarium/rare name = "Rare fish needed for my aquarium!" - weight = 8 + weight = 1 value = 1500 val_mod_range = 0.3 @@ -236,7 +269,7 @@ /datum/mission/acquire/fish_cook name = "Fish needed for my meal" - weight = 8 + weight = 3 duration = 40 MINUTES val_mod_range = 0.2 objective_type = /obj/item/fish @@ -307,3 +340,20 @@ . = ..() var/datum/component/storage/STR = GetComponent(/datum/component/storage) STR.max_items = 3 + +/obj/item/storage/box/anomaly + name = "anomaly case" + desc = "A metallic box made to store anomaly cores. They aren't always the safest to lug around." + icon = 'icons/obj/nuke_tools.dmi' + icon_state = "core_container_sealed" //it'd be neat if I could figure out how to make this seal but that's a problem for me in 6 months + item_state = "tile" + lefthand_file = 'icons/mob/inhands/misc/tiles_lefthand.dmi' + righthand_file = 'icons/mob/inhands/misc/tiles_righthand.dmi' + foldable = null + +/obj/item/storage/box/anomaly/ComponentInitialize() + . = ..() + var/datum/component/storage/STR = GetComponent(/datum/component/storage) + STR.max_combined_w_class = WEIGHT_CLASS_NORMAL + STR.max_w_class = WEIGHT_CLASS_NORMAL + STR.max_items = 1 diff --git a/code/modules/overmap/missions/research_mission.dm b/code/modules/overmap/missions/research_mission.dm index f43c50ffc958..181d1a4d9ba4 100644 --- a/code/modules/overmap/missions/research_mission.dm +++ b/code/modules/overmap/missions/research_mission.dm @@ -3,7 +3,7 @@ desc = "We require data on the behavior of electrical storms in the system for an ongoing study. \ Please anchor the attached sensor array to your ship and fly it through the storms.\ It must be powered to collect the data. " - value = 1500 // base value, before adding bonus for number of things to fly through + value = 3000 // base value, before adding bonus for number of things to fly through duration = 30 MINUTES weight = 8 @@ -62,6 +62,7 @@ desc = "We require data on the behavior of ion storms in the system for an ongoing study. \ Please anchor the attached sensor array to your ship and fly it through the storms. \ It must be powered to collect the data." + value = 3500 objective_type = /datum/overmap/event/emp /datum/mission/research/meteor @@ -69,10 +70,29 @@ desc = "We require data on the behavior of asteroid fields in the system for an ongoing study. \ Please anchor the attached sensor array to your ship and fly it through the fields. \ It must be powered to collect the data." - value = 2000 + value = 4000 weight = 4 objective_type = /datum/overmap/event/meteor +/datum/mission/research/carp + name = "Carp migration research mission" + desc = "We require data on the migration patterns of space carp for an ongoing study. \ + Please anchor the attached sensor array to your ship and fly it through the fields. \ + It must be powered to collect the data." + value = 2000 + weight = 4 + num_wanted = 3 + objective_type = /datum/overmap/event/meteor/carp + +/datum/mission/research/dust + name = "dust research mission" + desc = "We require data on the density of space dust for updated navcharts. \ + Please anchor the attached sensor array to your ship and fly it through the fields. \ + It must be powered to collect the data." + value = 1000 + weight = 4 + objective_type = /datum/overmap/event/meteor/dust + /* Research mission scanning machine */ diff --git a/code/modules/overmap/objects/dynamic_datum.dm b/code/modules/overmap/objects/dynamic_datum.dm index 3ae5ac1d45dc..deecae61e3ea 100644 --- a/code/modules/overmap/objects/dynamic_datum.dm +++ b/code/modules/overmap/objects/dynamic_datum.dm @@ -41,6 +41,9 @@ ///The X bounds of the virtual z level var/vlevel_width = QUADRANT_MAP_SIZE + //controls what kind of sound we play when we land and the maptext comes up + var/landing_sound + /datum/overmap/dynamic/Initialize(position, load_now=TRUE, ...) . = ..() @@ -80,9 +83,11 @@ /datum/overmap/dynamic/post_docked(datum/overmap/ship/controlled/dock_requester) if(planet_name) - for(var/mob/M as anything in GLOB.player_list) - if(dock_requester.shuttle_port.is_in_shuttle_bounds(M)) - M.play_screen_text("[planet_name]
[station_time_timestamp_fancy("hh:mm")]") + for(var/mob/Mob as anything in GLOB.player_list) + if(dock_requester.shuttle_port.is_in_shuttle_bounds(Mob)) + Mob.play_screen_text("[planet_name]
[station_time_timestamp_fancy("hh:mm")]") + playsound(Mob, landing_sound, 50) + /datum/overmap/dynamic/post_undocked(datum/overmap/dock_requester) if(preserve_level) @@ -113,10 +118,17 @@ probabilities = list() for(var/datum/planet_type/planet_type as anything in subtypesof(/datum/planet_type)) probabilities[initial(planet_type.planet)] = initial(planet_type.weight) - planet = SSmapping.planet_types[force_encounter ? force_encounter : pickweightAllowZero(probabilities)] - Rename(planet.name) + + if(planet.planet !=DYNAMIC_WORLD_ASTEROID && planet.planet != DYNAMIC_WORLD_SPACERUIN) //these aren't real planets + planet_name = "[gen_planet_name()]" + Rename(planet_name) + token.name = "[planet_name]" + " ([planet.name])" + if(planet.planet == DYNAMIC_WORLD_ASTEROID || planet.planet == DYNAMIC_WORLD_SPACERUIN) + Rename(planet.name) + token.name = "[planet.name]" + token.icon_state = planet.icon_state token.desc = planet.desc token.color = planet.color @@ -124,6 +136,8 @@ default_baseturf = planet.default_baseturf mapgen = planet.mapgen weather_controller_type = planet.weather_controller_type + landing_sound = planet.landing_sound + preserve_level = planet.preserve_level //it came to me while I was looking at chickens if(vlevel_height >= 255 && vlevel_width >= 255) //little easter egg planet_name = "LV-[pick(rand(11111,99999))]" @@ -262,6 +276,8 @@ area_flags = HIDDEN_AREA | CAVES_ALLOWED | FLORA_ALLOWED | MOB_SPAWN_ALLOWED //allows jaunters to work ambientsounds = REEBE - - - +/area/overmap_encounter/planetoid/gas_giant + name = "\improper Gas Giant" + sound_environment = SOUND_ENVIRONMENT_MOUNTAINS + ambientsounds = REEBE + has_gravity = GAS_GIANT_GRAVITY diff --git a/code/modules/overmap/objects/event_datum.dm b/code/modules/overmap/objects/event_datum.dm index 5b969dd13f2a..8ee2136e0d02 100644 --- a/code/modules/overmap/objects/event_datum.dm +++ b/code/modules/overmap/objects/event_datum.dm @@ -11,10 +11,12 @@ var/spread_chance = 0 ///How many additional tiles to spawn at once in the selected orbit. Used with OVERMAP_GENERATOR_SOLAR. var/chain_rate = 0 + var/desc /datum/overmap/event/Initialize(position, ...) . = ..() SSovermap.events += src + token.desc = desc /datum/overmap/event/Destroy() . = ..() @@ -24,29 +26,30 @@ * The main proc for calling other procs. Called by SSovermap. */ /datum/overmap/event/proc/apply_effect() - for(var/datum/overmap/ship/controlled/S in get_nearby_overmap_objects()) + for(var/datum/overmap/ship/controlled/Ship in get_nearby_overmap_objects()) if(prob(chance_to_affect)) - affect_ship(S) + affect_ship(Ship) /** * The proc called on all ships that are currently being affected. */ -/datum/overmap/event/proc/affect_ship(datum/overmap/ship/controlled/S) +/datum/overmap/event/proc/affect_ship(datum/overmap/ship/controlled/Ship) return -///METEOR STORMS - Bounces harmlessly off the shield... unless your shield is breached +///METEOR STORMS - explodes your ship if you go too fast /datum/overmap/event/meteor - name = "asteroid storm (moderate)" + name = "asteroid field (moderate)" + desc = "An area of space rich with asteroids, going fast through here could prove dangerous" token_icon_state = "meteor1" chance_to_affect = 15 spread_chance = 50 chain_rate = 4 + var/safe_speed = 3 var/list/meteor_types = list( /obj/effect/meteor/dust=3, /obj/effect/meteor/medium=8, - /obj/effect/meteor/big=3, - /obj/effect/meteor/flaming=1, + /obj/effect/meteor/big=1, /obj/effect/meteor/irradiated=3 ) @@ -57,38 +60,46 @@ token.light_color = "#a08444" token.update_icon() -/datum/overmap/event/meteor/affect_ship(datum/overmap/ship/controlled/S) - spawn_meteor(meteor_types, S.shuttle_port.get_virtual_level(), 0) +/datum/overmap/event/meteor/apply_effect() + for(var/datum/overmap/ship/controlled/Ship in get_nearby_overmap_objects()) + if(Ship.get_speed() > safe_speed) + var/how_fast = (Ship.get_speed() - safe_speed) + if(prob(chance_to_affect + how_fast)) + affect_ship(Ship) + +/datum/overmap/event/meteor/affect_ship(datum/overmap/ship/controlled/Ship) + spawn_meteor(meteor_types, Ship.shuttle_port.get_virtual_level(), 0) /datum/overmap/event/meteor/minor - name = "asteroid storm (minor)" + name = "asteroid field (minor)" chain_rate = 3 meteor_types = list( + /obj/effect/meteor/dust=12, /obj/effect/meteor/medium=4, - /obj/effect/meteor/big=8, - /obj/effect/meteor/flaming=3, - /obj/effect/meteor/irradiated=3 + /obj/effect/meteor/irradiated=2 ) /datum/overmap/event/meteor/major - name = "asteroid storm (major)" + name = "asteroid field (major)" spread_chance = 25 chain_rate = 6 meteor_types = list( - /obj/effect/meteor/medium=5, - /obj/effect/meteor/big=75, + /obj/effect/meteor/medium=50, + /obj/effect/meteor/big=25, /obj/effect/meteor/flaming=10, /obj/effect/meteor/irradiated=10, /obj/effect/meteor/tunguska = 1 ) -///ION STORM - Causes EMP pulses on the shuttle, wreaking havoc on the shields +///ION STORM - explodes your IPCs /datum/overmap/event/emp name = "ion storm (moderate)" + desc = "A heavily ionized area of space, prone to causing electromagnetic pulses in ships" token_icon_state = "ion1" spread_chance = 20 chain_rate = 2 - var/strength = 3 + chance_to_affect = 20 + var/strength = 4 /datum/overmap/event/emp/Initialize(position, ...) . = ..() @@ -105,25 +116,28 @@ for(var/mob/M as anything in GLOB.player_list) if(S.shuttle_port.is_in_shuttle_bounds(M)) M.playsound_local(S.shuttle_port, 'sound/weapons/ionrifle.ogg', strength) - shake_camera(M, 10, strength) /datum/overmap/event/emp/minor name = "ion storm (minor)" chain_rate = 1 strength = 1 + chance_to_affect = 15 /datum/overmap/event/emp/major name = "ion storm (major)" + chance_to_affect = 25 chain_rate = 4 - strength = 5 + strength = 6 -///ELECTRICAL STORM - Zaps places in the shuttle +///ELECTRICAL STORM - explodes your computer and IPCs /datum/overmap/event/electric name = "electrical storm (moderate)" + desc = "A spatial anomaly, an unfortunately common sight on the frontier. Disturbing it tends to lead to intense electrical discharges" token_icon_state = "electrical1" chance_to_affect = 15 spread_chance = 30 chain_rate = 3 + var/zap_flag = ZAP_STORM_FLAGS var/max_damage = 15 var/min_damage = 5 @@ -137,11 +151,10 @@ /datum/overmap/event/electric/affect_ship(datum/overmap/ship/controlled/S) var/datum/virtual_level/ship_vlevel = S.shuttle_port.get_virtual_level() var/turf/source = ship_vlevel.get_side_turf(pick(GLOB.cardinals)) - tesla_zap(source, 10, TESLA_DEFAULT_POWER, ZAP_TESLA_FLAGS) + tesla_zap(source, 10, TESLA_DEFAULT_POWER, zap_flag) for(var/mob/M as anything in GLOB.player_list) if(S.shuttle_port.is_in_shuttle_bounds(M)) M.playsound_local(source, 'sound/magic/lightningshock.ogg', rand(min_damage / 10, max_damage / 10)) - shake_camera(M, 10, rand(min_damage / 10, max_damage / 10)) /datum/overmap/event/electric/minor name = "electrical storm (minor)" @@ -156,9 +169,11 @@ chain_rate = 6 max_damage = 20 min_damage = 10 + zap_flag = ZAP_TESLA_FLAGS /datum/overmap/event/nebula name = "nebula" + desc = "There's coffee in here" token_icon_state = "nebula" chain_rate = 8 spread_chance = 75 @@ -172,6 +187,7 @@ /datum/overmap/event/wormhole name = "wormhole" + desc = "A hole through space. If you go through here, you might end up anywhere." token_icon_state = "wormhole" spread_chance = 0 chain_rate = 0 @@ -227,6 +243,95 @@ if(5) return"#6d80c7" +//Carp "meteors" - throws carp at the ship + +/datum/overmap/event/meteor/carp + name = "carp migration (moderate)" + desc = "A migratory school of space carp. They travel at high speeds, and flying through them may cause them to impact your ship" + token_icon_state = "carp1" + chance_to_affect = 15 + spread_chance = 50 + chain_rate = 4 + safe_speed = 2 + meteor_types = list( + /obj/effect/meteor/carp=16, + /obj/effect/meteor/carp/big=1, //numbers I pulled out of my ass + ) + +/datum/overmap/event/meteor/carp/Initialize(position, ...) + . = ..() + token.icon_state = "carp[rand(1, 4)]" + token.color = "#7b1ca8" + token.light_color = "#7b1ca8" + token.update_icon() + + +/datum/overmap/event/meteor/carp/minor + name = "carp migration (minor)" + token_icon_state = "carp1" + chance_to_affect = 5 + spread_chance = 25 + chain_rate = 4 + meteor_types = list( + /obj/effect/meteor/carp=8 + ) + + +/datum/overmap/event/meteor/carp/major + name = "carp migration (major)" + token_icon_state = "carp1" + chance_to_affect = 25 + spread_chance = 25 + chain_rate = 4 + meteor_types = list( + /obj/effect/meteor/carp=7, + /obj/effect/meteor/carp/big=1, + ) + +// dust clouds throw dust if you go Way Fast + +/datum/overmap/event/meteor/dust + name = "dust cloud" + desc = "A cloud of spaceborne dust. Relatively harmless, unless you're travelling at relative speeds" + token_icon_state = "carp1" + chance_to_affect = 30 + spread_chance = 50 + chain_rate = 4 + safe_speed = 7 + meteor_types = list( + /obj/effect/meteor/dust=3, + ) + +/datum/overmap/event/meteor/dust/Initialize(position, ...) + . = ..() + token.icon_state = "dust[rand(1, 4)]" + token.color = "#506469" //we should make these defines + token.light_color = "#506469" + token.update_icon() + +/datum/overmap/event/anomaly + name = "anomaly field" + desc = "A highly anomalous area of space, disturbing it leads to the manifestation of odd spatial phenomena" + token_icon_state = "anomaly1" + chance_to_affect = 10 + spread_chance = 35 + chain_rate = 6 + +/datum/overmap/event/anomaly/Initialize(position, ...) + . = ..() + token.icon_state = "anomaly[rand(1, 4)]" + token.color = "#c46a24" + token.light_color = "#c46a24" + token.update_icon() + +/datum/overmap/event/anomaly/affect_ship(datum/overmap/ship/controlled/S) + var/area/source_area = pick(S.shuttle_port.shuttle_areas) + var/source_object = pick(source_area.contents) + new /obj/effect/spawner/lootdrop/anomaly/storm(get_turf(source_object)) + for(var/mob/M as anything in GLOB.player_list) + if(S.shuttle_port.is_in_shuttle_bounds(M)) + M.playsound_local(S.shuttle_port, 'sound/effects/bamf.ogg', 100) + GLOBAL_LIST_INIT(overmap_event_pick_list, list( /datum/overmap/event/wormhole = 10, /datum/overmap/event/nebula = 60, @@ -238,6 +343,11 @@ GLOBAL_LIST_INIT(overmap_event_pick_list, list( /datum/overmap/event/emp/major = 45, /datum/overmap/event/meteor/minor = 45, /datum/overmap/event/meteor = 40, - /datum/overmap/event/meteor/major = 35 + /datum/overmap/event/meteor/major = 35, + /datum/overmap/event/meteor/carp/minor = 45, + /datum/overmap/event/meteor/carp = 35, + /datum/overmap/event/meteor/carp/major = 20, + /datum/overmap/event/meteor/dust = 50, + /datum/overmap/event/anomaly = 10 )) diff --git a/code/modules/overmap/objects/outpost.dm b/code/modules/overmap/objects/outpost.dm index 4350e074c115..4ea930098c6b 100644 --- a/code/modules/overmap/objects/outpost.dm +++ b/code/modules/overmap/objects/outpost.dm @@ -15,7 +15,7 @@ fill_missions() addtimer(CALLBACK(src, .proc/fill_missions), 10 MINUTES, TIMER_STOPPABLE|TIMER_LOOP|TIMER_DELETE_ME) var/station_icon_num - station_icon_num = rand(1,5) + station_icon_num = rand(1,4) token.icon_state = "station_[station_icon_num]" /datum/overmap/dynamic/outpost/get_jump_to_turf() diff --git a/code/modules/overmap/objects/star.dm b/code/modules/overmap/objects/star.dm index 6dfca56def15..b031c467754c 100644 --- a/code/modules/overmap/objects/star.dm +++ b/code/modules/overmap/objects/star.dm @@ -5,10 +5,13 @@ var/color_vary = 0 /datum/overmap/star/Initialize(position, ...) - Rename(gen_star_name()) + var/name = gen_star_name() + Rename(name) + set_station_name(name) token.desc = token_desc alter_token_appearance() + /datum/overmap/star/proc/gen_star_name() return "[pick(GLOB.star_names)] [pick(GLOB.greek_letters)]" diff --git a/code/modules/overmap/planets/planet_types.dm b/code/modules/overmap/planets/planet_types.dm index def4d21f39ac..05128d928bc9 100644 --- a/code/modules/overmap/planets/planet_types.dm +++ b/code/modules/overmap/planets/planet_types.dm @@ -9,10 +9,12 @@ var/icon_state = "globe" var/color = "#ffffff" var/weight = 20 + var/preserve_level = FALSE + var/landing_sound /datum/planet_type/lava name = "lava planet" - desc = "A very weak energy signal originating from a planet with lots of seismic and volcanic activity." + desc = "A planet rife with seismic and volcanic activity. High temperatures and dangerous xenofauna render it dangerous for the unprepared." planet = DYNAMIC_WORLD_LAVA icon_state = "globe_2" color = COLOR_ORANGE @@ -20,10 +22,12 @@ default_baseturf = /turf/open/floor/plating/asteroid/basalt/lava weather_controller_type = /datum/weather_controller/lavaland ruin_type = RUINTYPE_LAVA + landing_sound = 'sound/effects/planet_landing_2.ogg' + /datum/planet_type/ice name = "frozen planet" - desc = "A very weak energy signal originating from a planet with traces of water and extremely low temperatures." + desc = "A frozen planet covered in thick snow, thicker ice, and dangerous predators." planet = DYNAMIC_WORLD_ICE icon_state = "globe_2" color = COLOR_BLUE_LIGHT @@ -31,10 +35,11 @@ default_baseturf = /turf/open/floor/plating/asteroid/snow/icemoon weather_controller_type = /datum/weather_controller/snow_planet ruin_type = RUINTYPE_ICE + landing_sound = 'sound/effects/planet_landing_2.ogg' /datum/planet_type/jungle name = "jungle planet" - desc = "A very weak energy signal originating from a planet teeming with life." + desc = "A densely forested world, filled with vines, animals, and underbrush. Surprisingly habitable with a machete." planet = DYNAMIC_WORLD_JUNGLE icon_state = "globe_2" color = COLOR_LIME @@ -42,10 +47,11 @@ default_baseturf = /turf/open/floor/plating/dirt/jungle weather_controller_type = /datum/weather_controller/lush ruin_type = RUINTYPE_JUNGLE + landing_sound = 'sound/effects/planet_landing_1.ogg' /datum/planet_type/rock name = "rock planet" - desc = "A very weak energy signal originating from a iron rich and rocky planet." + desc = "A rocky red world in the midst of terraforming. While some plants have taken hold, it is widely hostile to life." planet = DYNAMIC_WORLD_ROCKPLANET icon_state = "globe_2" color = "#bd1313" @@ -53,10 +59,11 @@ default_baseturf = /turf/open/floor/plating/asteroid weather_controller_type = /datum/weather_controller/rockplanet ruin_type = RUINTYPE_ROCK + landing_sound = 'sound/effects/planet_landing_2.ogg' /datum/planet_type/sand name = "sand planet" - desc = "A very weak energy signal originating from a planet with many traces of silica." + desc = "A formerly vibrant world, turned to sand by the ravages of the ICW. The survivors of it are long mad by now." planet = DYNAMIC_WORLD_SAND icon_state = "globe_2" color = COLOR_GRAY @@ -64,10 +71,11 @@ default_baseturf = /turf/open/floor/plating/asteroid/whitesands weather_controller_type = /datum/weather_controller/desert ruin_type = RUINTYPE_SAND + landing_sound = 'sound/effects/planet_landing_2.ogg' /datum/planet_type/beach name = "beach planet" - desc = "A very weak energy signal originating from a warm, oxygen rich planet." + desc = "The platonic ideal of vacation spots. Warm, comfortable temperatures, and a breathable atmosphere." planet = DYNAMIC_WORLD_BEACHPLANET icon_state = "globe" color = "#c6b597" @@ -75,6 +83,7 @@ default_baseturf = /turf/open/floor/plating/asteroid/sand/lit weather_controller_type = /datum/weather_controller/lush ruin_type = RUINTYPE_BEACH + landing_sound = 'sound/effects/planet_landing_1.ogg' /datum/planet_type/reebe name = "???" @@ -100,6 +109,7 @@ default_baseturf = /turf/open/space weather_controller_type = null ruin_type = null // asteroid ruins when + landing_sound = 'sound/effects/planet_landing_1.ogg' /datum/planet_type/spaceruin name = "weak energy signal" @@ -111,10 +121,11 @@ default_baseturf = /turf/open/space weather_controller_type = null ruin_type = RUINTYPE_SPACE + landing_sound = 'sound/effects/planet_landing_2.ogg' /datum/planet_type/waste name = "waste disposal planet" - desc = "A very weak energy signal originating from a planet marked as waste disposal." + desc = "A highly oxygenated world, coated in garbage, radiation, and rust." planet = DYNAMIC_WORLD_WASTEPLANET icon_state = "globe_2" color = "#a9883e" @@ -122,3 +133,30 @@ default_baseturf = /turf/open/floor/plating/asteroid/wasteplanet weather_controller_type = /datum/weather_controller/chlorine ruin_type = RUINTYPE_WASTE + landing_sound = 'sound/effects/planet_landing_2.ogg' + +/datum/planet_type/gas_giant + name = "gas giant" + desc = "A floating ball of gas, with high gravity and even higher pressure." + planet = DYNAMIC_WORLD_GAS_GIANT + icon_state = "globe" + color = COLOR_DARK_MODERATE_ORANGE + mapgen = /datum/map_generator/single_biome/gas_giant + default_baseturf = /turf/open/chasm/gas_giant + weather_controller_type = null + ruin_type = null //it's a Gas Giant. Not Cloud fuckin City + weight = 0 + preserve_level = TRUE + landing_sound = 'sound/effects/planet_landing_1.ogg' + +/datum/planet_type/plasma_giant + name = "plasma giant" + desc = "The backbone of interstellar travel, the mighty plasma giant allows fuel collection to take place." + planet = DYNAMIC_WORLD_PLASMA_GIANT + color = COLOR_PURPLE + mapgen = /datum/map_generator/single_biome/plasma_giant + default_baseturf = /turf/open/chasm/gas_giant/plasma + weight = 0 + icon_state = "globe" + preserve_level = TRUE + landing_sound = 'sound/effects/planet_landing_1.ogg' diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index 18057ac93fef..d17f94af19ae 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -17,6 +17,9 @@ ricochet_chance = 80 reflectable = REFLECT_NORMAL +/obj/projectile/beam/throw_atom_into_space() + return + /obj/projectile/beam/laser tracer_type = /obj/effect/projectile/tracer/laser diff --git a/icons/misc/overmap.dmi b/icons/misc/overmap.dmi index 4d622bd064cd..f0c9f6e44677 100644 Binary files a/icons/misc/overmap.dmi and b/icons/misc/overmap.dmi differ diff --git a/icons/obj/meteor.dmi b/icons/obj/meteor.dmi index 84faabcc1881..3e37c229ec93 100644 Binary files a/icons/obj/meteor.dmi and b/icons/obj/meteor.dmi differ diff --git a/shiptest.dme b/shiptest.dme index 6496bbd65b03..7999c6740ca0 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -664,6 +664,7 @@ #include "code\datums\mapgen\planetary\WasteGenerator.dm" #include "code\datums\mapgen\single_biome\_SingleBiome.dm" #include "code\datums\mapgen\single_biome\AsteroidCaves.dm" +#include "code\datums\mapgen\single_biome\Gas_Giant.dm" #include "code\datums\mapgen\single_biome\ReebeGenerator.dm" #include "code\datums\martial\_martial.dm" #include "code\datums\martial\boxing.dm" @@ -3059,9 +3060,9 @@ #include "code\modules\reagents\reagent_containers\chem_pack.dm" #include "code\modules\reagents\reagent_containers\dropper.dm" #include "code\modules\reagents\reagent_containers\glass.dm" -#include "code\modules\reagents\reagent_containers\jug.dm" #include "code\modules\reagents\reagent_containers\hypospray.dm" #include "code\modules\reagents\reagent_containers\hypovial.dm" +#include "code\modules\reagents\reagent_containers\jug.dm" #include "code\modules\reagents\reagent_containers\maunamug.dm" #include "code\modules\reagents\reagent_containers\medigel.dm" #include "code\modules\reagents\reagent_containers\mortar.dm" diff --git a/sound/effects/planet_landing_1.ogg b/sound/effects/planet_landing_1.ogg new file mode 100644 index 000000000000..1581c1f9955a Binary files /dev/null and b/sound/effects/planet_landing_1.ogg differ diff --git a/sound/effects/planet_landing_2.ogg b/sound/effects/planet_landing_2.ogg new file mode 100644 index 000000000000..bd206161173c Binary files /dev/null and b/sound/effects/planet_landing_2.ogg differ