diff --git a/baystation12.dme b/baystation12.dme index b0f8c143381f5..ad1f0695cad8c 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -3367,6 +3367,8 @@ #include "mods\_master_files\code\modules\culture_descriptor\religion\religions_vox.dm" #include "mods\_master_files\code\modules\events\gravity.dm" #include "mods\_master_files\code\modules\mob\new_player\new_player.dm" +#include "mods\_master_files\code\modules\overmap\distress.dm" +#include "mods\_master_files\code\modules\overmap\panicbutton.dm" #include "mods\_master_files\code\modules\power\gravitygenerator.dm" #include "mods\_master_files\code\modules\projectiles\projectile\bullets.dm" #include "mods\_master_files\code\modules\species\station\adherent.dm" diff --git a/mods/_master_files/code/modules/overmap/distress.dm b/mods/_master_files/code/modules/overmap/distress.dm new file mode 100644 index 0000000000000..3a0e220a3f885 --- /dev/null +++ b/mods/_master_files/code/modules/overmap/distress.dm @@ -0,0 +1,84 @@ +/obj/overmap/radio/distress/panic_distress + name = "panic distress" + icon = 'packs/infinity/icons/obj/distress.dmi' + icon_state = "distress" + +/obj/overmap/radio/distress/panic_distress/get_scan_data(mob/user) + return list("A unilateral, broadband data broadcast originating at \the [source] carrying only an emergency code sequence.") + +/obj/overmap/radio/distress/panic_distress/set_origin(obj/overmap/origin) + GLOB.moved_event.register(origin, src, TYPE_PROC_REF(/obj/overmap/radio, follow)) + GLOB.destroyed_event.register(origin, src, TYPE_PROC_REF(/datum, qdel_self)) + forceMove(origin.loc) + source = origin + pixel_x = 0 + pixel_y = 0 + +/obj/overmap/visitable/proc/distress(mob/user) + + log_and_message_admins(message ="Overmap panic button hit on z[z] ([name]) by '[user?.ckey || "Unknown"]'") + + var/distress_message = "Это автоматический сигнал бедствия от радиомаяка, соответствующего стандарту MIL-DTL-93352, передаваемого на частоте [PUB_FREQ*0.1]кГц. \ + Этот маяк был запущен с '[initial(name)]'. Местоположение передающего устройства: [get_distress_info()]. \ + Согласно Межпланетной конвенции о космической спасательной деятельности, лица, получившие это сообщение, должны попытаться предпринять попытку спасения, \ + или передать сообщение тем, кто может это сделать. Это сообщение повторится еще раз через 5 минут. Спасибо за вашу помощь." + + //sends to a single z-level of every /obj/overmap/visitable + var/list/sent_to_z = list() + for(var/zlevel in map_sectors) + var/obj/overmap/visitable/O = map_sectors[zlevel] + if(!isnull(O)) + var/should_send = TRUE + var/list/overmap_z_list = O.map_z + for(var/z_map in overmap_z_list) + if(z_map in sent_to_z) + should_send = FALSE + else + sent_to_z.Add(z_map) + if(should_send && length(overmap_z_list)) + priority_announcement.Announce(distress_message, "Automated Distress Signal", new_sound = sound('packs/infinity/sound/AI/sos.ogg'), zlevels = overmap_z_list) + + //sends to a single random z-level (original) + //priority_announcement.Announce(distress_message, "Automated Distress Signal", new_sound = sound('packs/infinity/sound/AI/sos.ogg'), zlevels = GLOB.using_map.player_levels) + + var/obj/overmap/radio/distress/panic_distress/emergency_signal = new /obj/overmap/radio/distress/panic_distress() + + emergency_signal.set_origin(src) + + addtimer(new Callback(src, PROC_REF(distress_update)), 5 MINUTES) + return TRUE + +/obj/overmap/visitable/proc/get_distress_info() + return "\[X:[x], Y:[y]\]" + +// Get heading in degrees (like a compass heading) +/obj/overmap/visitable/ship/proc/get_heading_degrees() + return (Atan2(speed[2], speed[1]) + 360) % 360 // Yes ATAN2(y, x) is correct to get clockwise degrees + +/obj/overmap/visitable/ship/get_distress_info() + var/turf/T = get_turf(src) // Usually we're on the turf, but sometimes we might be landed or something. + var/x_to_use = T?.x || "UNK" + var/y_to_use = T?.y || "UNK" + return "\[X:[x_to_use], Y:[y_to_use], VEL:[get_speed() * 1000], HDG:[get_heading_degrees()]\]" + +/obj/overmap/visitable/proc/distress_update() + var/message = "Это последнее сообщение с маяка бедствия, запущенного '[initial(name)]'. Местоположение передающего устройства: [get_distress_info()]. \ + Пожалуйста, окажите помощь в соответствии с вашими обязательствами по Межпланетной конвенции о космической спасательной деятельности, или передайте это сообщение той стороне, которая может это сделать." + + //sends to a single z-level of every /obj/overmap/visitable + var/list/sent_to_z = list() + for(var/zlevel in map_sectors) + var/obj/overmap/visitable/O = map_sectors[zlevel] + if(!isnull(O)) + var/should_send = TRUE + var/list/overmap_z_list = O.map_z + for(var/z_map in overmap_z_list) + if(z_map in sent_to_z) + should_send = FALSE + else + sent_to_z.Add(z_map) + if(should_send && length(overmap_z_list)) + priority_announcement.Announce(message, "Automated Distress Signal", new_sound = sound('packs/infinity/sound/AI/sos.ogg'), zlevels = overmap_z_list) + + //sends to a single random z-level (original) + //priority_announcement.Announce(message, "Automated Distress Signal", new_sound = sound('packs/infinity/sound/AI/sos.ogg'), zlevels = GLOB.using_map.player_levels) \ No newline at end of file diff --git a/mods/_master_files/code/modules/overmap/panicbutton.dm b/mods/_master_files/code/modules/overmap/panicbutton.dm new file mode 100644 index 0000000000000..2c0862c1ec0eb --- /dev/null +++ b/mods/_master_files/code/modules/overmap/panicbutton.dm @@ -0,0 +1,64 @@ +/obj/structure/panic_button + name = "distress beacon trigger" + desc = "WARNING: Will deploy ship's distress beacon and request help. Misuse may result in fines and jail time." + icon = 'packs/infinity/icons/obj/panicbutton.dmi' + icon_state = "panicbutton" + anchored = TRUE + + var/glass = TRUE + var/launched = FALSE + + +/obj/structure/panic_button/on_update_icon() + if(launched) + icon_state = "[initial(icon_state)]_launched" + else if(!glass) + icon_state = "[initial(icon_state)]_open" + else + icon_state = "[initial(icon_state)]" + +/obj/structure/panic_button/attack_hand(mob/living/user) + if(!istype(user)) + return ..() + + if(user.incapacitated()) + return + + // Already launched + if(launched) + to_chat(user, "The button is already depressed; the beacon has been launched already.") + // Glass present + else if(glass) + if(user.a_intent == I_HURT) + user.custom_emote(VISIBLE_MESSAGE, "smashes the glass on [src]!") + glass = FALSE + playsound(src, 'sound/effects/hit_on_shattered_glass.ogg') + update_icon() + else + user.custom_emote(VISIBLE_MESSAGE, "pats [src] in a friendly manner.") + to_chat(user, "If you're trying to break the glass, you'll have to hit it harder than that...") + // Must be !glass and !launched + else if(!glass && !launched) + user.custom_emote(VISIBLE_MESSAGE, "pushes the button on [src]!") + playsound(src, get_sfx("button")) + update_icon() + launch(usr) + +/obj/structure/panic_button/proc/launch(mob/living/user) + var/sound/SND = sound('packs/infinity/sound/misc/emergency_beacon_launched.ogg') // Inside the loop because playsound_local modifies it for each person, so, need separate instances + + if(launched) + return + launched = TRUE + + var/overmap_sector + + if(GLOB.using_map.use_overmap) + overmap_sector = map_sectors["[z]"] + + var/obj/overmap/visitable/S = overmap_sector + if(!S) + error("Distress button hit on z[z] but that's not an overmap sector...") + return + S.distress(user) + playsound(src, SND, 25) diff --git a/mods/global_modpacks.dm b/mods/global_modpacks.dm index 2b0238f4439e2..dfed27be92162 100644 --- a/mods/global_modpacks.dm +++ b/mods/global_modpacks.dm @@ -36,5 +36,6 @@ #include "anomaly/_anomaly.dme" #include "integrated_circuits/_integrated_circuits.dme" #include "playable_away_yacht/_yacht.dme" +#include "overmap/_overmap.dme" #include "../packs/sierra-tweaks/_pack.dm" diff --git a/mods/overmap/README.md b/mods/overmap/README.md new file mode 100644 index 0000000000000..ff36e483161d1 --- /dev/null +++ b/mods/overmap/README.md @@ -0,0 +1,83 @@ + +#### Список PRов: + +- https://github.com/SierraBay/SierraBay12/pull/2667 + + + +## Overmap + +ID мода: OVERMAP + + +### Описание мода + +Портирует отображение для скана контактов и экстренную кнопку бедствия. В идеале может содержать любые изменения по овермапу. + + +### Изменения *кор кода* + +- Отсутствуют + + +### Оверрайды + +- Отсутствуют + + +### Дефайны + +- Отсутствуют + + +### Используемые файлы, не содержащиеся в модпаке + +- `mods/_master_files/code/modules/overmap/distress.dm` +- `mods/_master_files/code/modules/overmap/panicbutton.dm` +- `packs/infinity/icons/obj/distress.dmi` +- `packs/infinity/sound/AI/sos.ogg` +- `packs/infinity/icons/obj/panicbutton.dmi` +- `packs/infinity/sound/misc/emergency_beacon_launched.ogg` + + +### Авторы: + +Портировал:Builder13 +Оригинальный ПР: https://github.com/ss220-space/Baystation12/pull/350 (ImJustKisik) + diff --git a/mods/overmap/_overmap.dm b/mods/overmap/_overmap.dm new file mode 100644 index 0000000000000..18a9eda318a3f --- /dev/null +++ b/mods/overmap/_overmap.dm @@ -0,0 +1,4 @@ +/singleton/modpack/overmap + name = "Overmap" + desc = "Дополнения и изменения, связанные с овермапом." + author = "Builder13(портировал), ImJustKisik(автор)" \ No newline at end of file diff --git a/mods/overmap/_overmap.dme b/mods/overmap/_overmap.dme new file mode 100644 index 0000000000000..6858eaeb40448 --- /dev/null +++ b/mods/overmap/_overmap.dme @@ -0,0 +1,15 @@ +#ifndef MODPACK_OVERMAP +#define MODPACK_OVERMAP + +#include "_overmap.dm" + +#include "code/contacts/contact_class.dm" +#include "code/contacts/special_contact_class.dm" + +#include "code/overmap_object.dm" +#include "code/ship.dm" + +#include "code/overmap_objects/stationary.dm" +#include "code/overmap_objects/ships.dm" + +#endif diff --git a/mods/overmap/code/contacts/contact_class.dm b/mods/overmap/code/contacts/contact_class.dm new file mode 100644 index 0000000000000..d08bf95ab9ebe --- /dev/null +++ b/mods/overmap/code/contacts/contact_class.dm @@ -0,0 +1,38 @@ +/decl/ship_contact_class + var/class_short = "Ship" + var/class_long = "Unknown Ship Class" + var/min_ship_mass = 0 + var/max_ship_mass = INFINITY + +/decl/ship_contact_class/ship + class_short = "SH" + class_long = "Ship" + max_ship_mass = 10000 + +/decl/ship_contact_class/shuttle + class_short = "SHUTTLE" + class_long = "Shuttle" + max_ship_mass = 10000 + +/decl/ship_contact_class/destroyer_escort + class_short = "DE" + class_long = "Destroyer Escort" + min_ship_mass = 10000 + max_ship_mass = 50000 + +/decl/ship_contact_class/destroyer + class_short = "DD" + class_long = "Destroyer" + min_ship_mass = 50000 + max_ship_mass = 100000 + +/decl/ship_contact_class/cruiser + class_short = "CA" + class_long = "Cruiser" + min_ship_mass = 100000 + max_ship_mass = 250000 + +/decl/ship_contact_class/capital_ship + class_short = "CAP" + class_long = "Capital Ship" + min_ship_mass = 250000 diff --git a/mods/overmap/code/contacts/special_contact_class.dm b/mods/overmap/code/contacts/special_contact_class.dm new file mode 100644 index 0000000000000..0826be0b86f42 --- /dev/null +++ b/mods/overmap/code/contacts/special_contact_class.dm @@ -0,0 +1,34 @@ +/decl/ship_contact_class/srv + class_short = "SRV" + class_long = "Sol Research Vessel" + max_ship_mass = 12000 + +/decl/ship_contact_class/srv_shuttle + class_short = "SRV" + class_long = "Research Shuttle" + max_ship_mass = 6000 + +/decl/ship_contact_class/gagarin + class_short = "GRC" + class_long = "Gagarin-Class recon craft" + max_ship_mass = 55000 + +/decl/ship_contact_class/merchant + class_short = "FTU" + class_long = "Free Trader Union Ship" + max_ship_mass = 7000 + +/decl/ship_contact_class/nagashino + class_short = "NAG" + class_long = "Nagashino-Class patrol craft" + max_ship_mass = 5000 + +/decl/ship_contact_class/dagon + class_short = "MAKO" + class_long = "Mako-Class Frigate" + max_ship_mass = 70000 + +/decl/ship_contact_class/nt_sshuttle + class_short = "NSS" + class_long = "Nanotrasen Small Shuttle" + max_ship_mass = 70000 \ No newline at end of file diff --git a/mods/overmap/code/overmap_object.dm b/mods/overmap/code/overmap_object.dm new file mode 100644 index 0000000000000..628c23a77ab25 --- /dev/null +++ b/mods/overmap/code/overmap_object.dm @@ -0,0 +1,13 @@ +/obj/overmap + var/scanner_desc = "" + +/obj/overmap/get_scan_data(mob/user) + var/temp_data = list({"Scan conducted at:
[stationtime2text()] [stationdate2text()] Grid coordinates:
[x],[y]\n\n[scanner_desc]"}) + for(var/id in scans) + var/datum/sector_scan/scan = scans[id] + if (!scan.required_skill || user.skill_check(scan.required_skill, scan.required_skill_level)) + temp_data += scan.description + else if (scan.low_skill_description) + temp_data += scan.low_skill_description + + return temp_data \ No newline at end of file diff --git a/mods/overmap/code/overmap_objects/ships.dm b/mods/overmap/code/overmap_objects/ships.dm new file mode 100644 index 0000000000000..2c77c6e77df3b --- /dev/null +++ b/mods/overmap/code/overmap_objects/ships.dm @@ -0,0 +1,111 @@ +/obj/overmap/visitable/ship + name = "spacecraft" + scanner_desc = "Unknown spacefaring vessel." + var/class = "spacefaring vessel" + var/decl/ship_contact_class/contact_class = /decl/ship_contact_class + +/obj/overmap/visitable/ship/sierra + scanner_desc = @{" +

Property of NanoTrasen Corporation: +[i]Registration[/i]: NSV Sierra +[i]Transponder[/i]: Transmitting (SCI), NanoTrasen +[b]Notice[/b]: A space object with wide of 121.2 meters, length of 214.5 meters and high near 14.3 meters. A Self Indentification Signal classifices \ + the target as NanoTrasen Science Vessel, a property of NanoTrasen Corporation."} + contact_class = /decl/ship_contact_class/dagon + +/obj/overmap/visitable/ship/landable/exploration_shuttle + scanner_desc = @{" +

Property of NanoTrasen Corporation: +[i]Registration[/i]: NSS Charon +[i]Transponder[/i]: Transmitting (CIV), non-hostile +[b]Notice[/b]: NanoTrasen Shuttle"} + contact_class = /decl/ship_contact_class/nt_sshuttle + +/obj/overmap/visitable/ship/landable/guppy + scanner_desc = @{" +

Property of NanoTrasen Corporation: +[i]Registration[/i]: NSS Guppy +[i]Transponder[/i]: Transmitting (CIV), non-hostile +[b]Notice[/b]: NanoTrasen Shuttle"} + contact_class = /decl/ship_contact_class/nt_sshuttle + +/obj/overmap/visitable/ship/landable/merc + scanner_desc = @{"[i]Registration[/i]: UNKNOWN +[i]Class[/i]: UNKNOWN +[i]Transponder[/i]: None Detected +[b]Notice[/b]: Unregistered vessel"} + contact_class = /decl/ship_contact_class/shuttle + +/obj/overmap/visitable/ship/casino + scanner_desc = @{"[i]Registration[/i]: Passenger liner +[i]Class[/i]: Small ship (Low Displacement) +[i]Transponder[/i]: Transmitting (CIV), non-hostile +[b]Notice[/b]: Sensors detect an undamaged vessel without any signs of activity"} + contact_class = /decl/ship_contact_class/ship + +/obj/overmap/visitable/ship/errant_pisces + scanner_desc = @{"[i]Registration[/i]: XCV Ahab's Harpoon +[i]Class[/i]: UNKNOWN +[i]Transponder[/i]: Transmitting (CIV) +[b]Notice[/b]: Sensors detect civilian vessel with unusual signs of life aboard"} + + +/obj/overmap/visitable/ship/scavver_gantry + scanner_desc = @{"[i]Registration[/i]: UNKNOWN +[i]Class[/i]: UNKNOWN +[i]Transponder[/i]: None Detected +[b]Notice[/b]: Sensor array detects a medium-sized vessel of irregular shape. Vessel origin is unidentifiable"} + +/obj/overmap/visitable/ship/landable/vox_ship + scanner_desc = @{"[i]Registration[/i]: UNKNOWN +[i]Class[/i]: UNKNOWN +[i]Transponder[/i]: None Detected +[b]Notice[/b]: Sensor array detects a medium-sized vessel of irregular shape. Unknown origin"} + +/obj/overmap/visitable/ship/yacht + scanner_desc = @{"[i]Registration[/i]: Aronai Sieyes +[i]Class[/i]: Small Ship (Low Displacement) +[i]Transponder[/i]: None Detected +[b]Notice[/b]: Many lifeforms lifesigns detected"} + contact_class = /decl/ship_contact_class/ship + +/obj/overmap/visitable/ship/farfleet + scanner_desc = @{"[i]Registration[/i]: ICCGN Farfleet Reconnaissance Craft +[i]Transponder[/i]: Transmitting (MIL), ICCG +[b]Notice[/b]: Warning! Slight traces of a cloaking device are present. This Craft has ICCGN Farfleet designation. Future scanning of ship internals blocked."} + contact_class = /decl/ship_contact_class/gagarin + +/obj/overmap/visitable/ship/landable/snz + scanner_desc = @{"[i]Registration[/i]: ICCGN Speedboat +[i]Class[/i]: Shuttle +[i]Transponder[/i]: Transmitting (MIL), ICCG +[b]Notice[/b]: SNZ-350 Speedboat. Space and atmosphere assault craft. The standard mass military production model of the Shipyards of Novaya Zemlya."} + contact_class = /decl/ship_contact_class/destroyer_escort + +/obj/overmap/visitable/ship/liberia + scanner_desc = @{"[i]Registration[/i]: FTU Liberia +[i]Transponder[/i]: Transmitting (CIV), non-hostile +[b]Notice[/b]: Independent trader vessel "} + contact_class = /decl/ship_contact_class/merchant + +/obj/overmap/visitable/ship/landable/mule + scanner_desc = @{"[i]Registration[/i]: PRIVATE +[i]Class[/i]: Small Shuttle +[i]Transponder[/i]: Transmitting (CIV), non-hostile +[b]Notice[/b]: Small private vessel"} + +/obj/overmap/visitable/ship/patrol + scanner_desc = @{" +

+ Registration: SCGDF Multipurpose Patrol Craft
+ Transponder: Transmitting (MIL), SCG
+ Notice: Nagashino-class Multipurpose Patrol Craft. Fine example of human fleet brilliant technologies with 5th Fleet designation and massive heat footprint."} + contact_class = /decl/ship_contact_class/nagashino + +/obj/overmap/visitable/ship/landable/reaper + scanner_desc = @{" +

+ Registration: SCGDF Shuttle
+ Class: Shuttle
+ Transponder: Transmitting (MIL), SCG
+ Notice: A heavily modified military gunboat of particular design. More of the dropship now, scanner detects heavy alteration to the hull of the vessel and no designation"} \ No newline at end of file diff --git a/mods/overmap/code/overmap_objects/stationary.dm b/mods/overmap/code/overmap_objects/stationary.dm new file mode 100644 index 0000000000000..47e534b6a89f1 --- /dev/null +++ b/mods/overmap/code/overmap_objects/stationary.dm @@ -0,0 +1,116 @@ +/obj/overmap/visitable + scanner_desc = "!! No Data Available !!" + +/obj/overmap/visitable/sector/exoplanet/barren + scanner_desc = @{"[i]Stellar Body[/i]>: UNKNOWN +[i]Class[/i]>: D-Class Planetoid +[i]Habitability[/i]>: Low +[b]Notice[/b]>: An exoplanet that couldn't hold its atmosphere"} + +/obj/overmap/visitable/sector/exoplanet/chlorine + scanner_desc = @{"[i]Stellar Body[/i]>: UNKNOWN +[i]Class[/i]>: N-Class Planetoid +[i]Habitability[/i]>: LOW (Noxious liquid chlorine) +[b]Notice[/b]>: An exoplanet with a chlorine based ecosystem. Large quantities of liquid chlorine are present."} + +/obj/overmap/visitable/sector/exoplanet/desert + scanner_desc = @{"[i]Stellar Body[/i]>: UNKNOWN +[i]Class[/i]>: N-Class Planetoid +[i]Habitability[/i]>: Moderate (High temperature) +[b]Notice[/b]>: An arid exoplanet with sparse biological resources but rich mineral deposits underground"} + +/obj/overmap/visitable/sector/exoplanet/grass + scanner_desc = @{"[i]Stellar Body[/i]>: UNKNOWN +[i]Class[/i]>: M-Class Planetoid +[i]Habitability[/i]>: IDEAL +[b]Notice[/b]>: Planet with abundant flora and fauna"} + +/obj/overmap/visitable/sector/exoplanet/shrouded + scanner_desc = @{"[i]Stellar Body[/i]>: UNKNOWN +[i]Class[/i]>: Unknown-Class Planetoid +[i]Habitability[/i]>: Unknown +[b]Notice[/b]>: An exoplanet shrouded in a perpetual storm of bizzare, light absorbing particles"} + +/obj/overmap/visitable/sector/exoplanet/snow + scanner_desc = @{"[i]Stellar Body[/i]>: UNKNOWN +[i]Class[/i]>: L-Class Planetoid +[i]Habitability[/i]>: Moderate (Low Temperature) +[b]Notice[/b]>: Cold planet with limited plant life"} + +/obj/overmap/visitable/sector/exoplanet/volcanic + scanner_desc = @{"[i]Stellar Body[/i]>: UNKNOWN +[i]Class[/i]>: D-Class Planetoid +[i]Habitability[/i]>: Low (High Temperature) +[b]Notice[/b]>: A tectonically unstable planet, extremely rich in minerals"} + +/obj/overmap/visitable/sector/arcticplanet + scanner_desc = @{"[i]Stellar Body[/i]: UNKNOWN +[i]Class[/i]: L-Class Planetoid +[i]Habitability[/i]: Moderate (Low Temperature) +[b]Notice[/b]: Sensor array detects an arctic planet with a small vessle on the planet's surface. Scans further indicate strange energy levels below the planet's surface"} + +/obj/overmap/visitable/sector/derelict + scanner_desc = @{"[i]Transponder[/i]: Various faint signals +[b]Notice[/b]: Warning! Significant field of space debris detected. May be salvagable."} + +/obj/overmap/visitable/sector/lar_maria + scanner_desc = @{"[i]Registration[/i]: UNKNOWN +[i]Class[/i]: Installation +[i]Transponder[/i]: None Detected +[b]Notice[/b]: Sensors detect an orbital station with low energy profile and sporadic life signs"} + +/obj/overmap/visitable/sector/magshield + scanner_desc = @{"[i]Registration[/i]: UNKNOWN +[i]Class[/i]: Installation +[i]Transponder[/i]: None Detected +[b]Notice[/b]: Sensors detect an orbital station above the exoplanet. Sporadic magentic impulses are registred inside it. Planet landing is impossible due to lower orbits being cluttered with chaotically moving metal chunks"} + +/obj/overmap/visitable/sector/meatstation + scanner_desc = @{"[i]Registration[/i]: UNKNOWN +[i]Class[/i]: Installation +[i]Transponder[/i]: None Detected +[b]Notice[/b]: An unpowered research station. A large quantity of nearby debris blocks more detail"} + +/obj/overmap/visitable/sector/away + scanner_desc = @{"[i]Registration[/i]: UNKNOWN +[i]Class[/i]: UNKNOWN +[i]Transponder[/i]: None Detected +[b]Notice[/b]: Faint signal detected, originating from the human-made structures on the site's surface"} + +/obj/overmap/visitable/sector/mininghome + scanner_desc = @{"[i]Registration[/i]: UNKNOWN +[i]Class[/i]: Installation +[i]Transponder[/i]: None Detected +[b]Notice[/b]: A small mining station. No active lifesigns found on the station. Sensors indicate an abundance of valuable ore"} + +/obj/overmap/visitable/sector/miningstation + scanner_desc = @{"Registration: Grayson Mining Industries
+Class: Installation
+Transponder: None Detected
+Notice: An orbital Mining Station bearing authentication codes from Grayson Mining Industries, sensors show inconsistant lifesigns aboard the station. It is emitting a weak signal on a public frequency, with no other discernible radio traffic."} + +/obj/overmap/visitable/sector/mobius_rift + scanner_desc = @{"[i]Registration[/i]: UNKNOWN +[i]Class[/i]: UNKNOWN +[i]Transponder[/i]: None Detected +[b]Notice[/b]: Sensors error: ERROR #E0x003141592: recursive stack overflow for CALCULATE_APPROXIMATE_SIZE()"} + +/obj/overmap/visitable/sector/slavers_base + scanner_desc = @{"[i]Registration[/i]: UNKNOWN +[i]Class[/i]: Installation (Space) +[i]Transponder[/i]: None Detected. +[b]Notice[/b]: Sensor array is reading an artificial structure inside the asteroid"} + +/obj/overmap/visitable/sector/vox_scav_ship + scanner_desc = @{"[i]Registration[/i]: UNKNOWN +[b]Notice[/b]: Sensor array detects a small asteroid cluster."} + +/obj/overmap/visitable/sector/skrellscoutspace + scanner_desc = @{"[i]Transponder[/i]: EW detected, impossible to identify. +[b]Notice[/b]: Warning! Slight traces of a cloaking device are present. Unable to determine exact location."} + +/obj/overmap/visitable/sector/smugglers + scanner_desc = @{"[i]Registration[/i]: UNKNOWN +[i]Class[/i]: Installation +[i]Transponder[/i]: None Detected +[b]Notice[/b]: A small station built into an asteroid. No radio traffic detected"} \ No newline at end of file diff --git a/mods/overmap/code/ship.dm b/mods/overmap/code/ship.dm new file mode 100644 index 0000000000000..fce17c579b262 --- /dev/null +++ b/mods/overmap/code/ship.dm @@ -0,0 +1,26 @@ +/obj/overmap/visitable/ship/get_scan_data(mob/user) + . = list({"Scan conducted at:
[stationtime2text()] [stationdate2text()] Grid coordinates:
[x],[y]\n\n[scanner_desc]"}) + for(var/id in scans) + var/datum/sector_scan/scan = scans[id] + if (!scan.required_skill || user.skill_check(scan.required_skill, scan.required_skill_level)) + . += scan.description + else if (scan.low_skill_description) + . += scan.low_skill_description + + var/decl/ship_contact_class/class = contact_class + . += "
Class: [class.class_long], mass [vessel_mass] tons." + if(!is_still()) + . += "Heading: [get_heading_angle()], speed [get_speed() * 1000]" + else + . += {"\n\[i\]Vessel was stationary at time of scan.\[/i\]\n"} + if(instant_contact) + . += "It is broadcasting a distress signal." + //. += jointext(extra_data, "
") + + var/life = 0 + + for(var/mob/living/L in GLOB.alive_mobs) + if(L.z in map_z) //Things inside things we'll consider shielded, otherwise we'd want to use get_z(L) + life++ + + . += {"\[i\]Life Signs\[/i\]: [life ? life : "None"]"} \ No newline at end of file diff --git a/packs/infinity/icons/obj/distress.dmi b/packs/infinity/icons/obj/distress.dmi new file mode 100644 index 0000000000000..08697495ed64d Binary files /dev/null and b/packs/infinity/icons/obj/distress.dmi differ diff --git a/packs/infinity/icons/obj/panicbutton.dmi b/packs/infinity/icons/obj/panicbutton.dmi new file mode 100644 index 0000000000000..40de3d8caef14 Binary files /dev/null and b/packs/infinity/icons/obj/panicbutton.dmi differ diff --git a/packs/infinity/sound/AI/sos.ogg b/packs/infinity/sound/AI/sos.ogg new file mode 100644 index 0000000000000..ded835c4784c6 Binary files /dev/null and b/packs/infinity/sound/AI/sos.ogg differ diff --git a/packs/infinity/sound/misc/emergency_beacon_launched.ogg b/packs/infinity/sound/misc/emergency_beacon_launched.ogg new file mode 100644 index 0000000000000..bd730fe2f5292 Binary files /dev/null and b/packs/infinity/sound/misc/emergency_beacon_launched.ogg differ